前提・実現したいこと
Pythonを活用したWebスクレイピング処理に関して、
scheduleモジュールを活用した定時処理を行いたいと考えています。
Webスクレイピング用の関数単体では問題なく動作するのですが、
scheduleモジュールで処理した際にエラーが出てしまいます。
関数の中にtry、exceptを組み込んでいる影響でしょうか。
※if elseに書き換えても同様のメッセージが発生しましたので更新したコードを記載いたします。
発生している問題・エラーメッセージ
AttributeError Traceback (most recent call last)
<ipython-input-89-fafa280c5140> in <module>()
2
3 while True:
----> 4 schedule.run_pending()
5 time.sleep(10)
4 frames
/usr/local/lib/python3.7/dist-packages/schedule/init.py in run_pending()
590 :data:default scheduler instance <default_scheduler>
.
591 """
--> 592 default_scheduler.run_pending()
593
594
/usr/local/lib/python3.7/dist-packages/schedule/init.py in run_pending(self)
92 runnable_jobs = (job for job in self.jobs if job.should_run)
93 for job in sorted(runnable_jobs):
---> 94 self._run_job(job)
95
96 def run_all(self, delay_seconds=0):
/usr/local/lib/python3.7/dist-packages/schedule/init.py in _run_job(self, job)
145
146 def _run_job(self, job):
--> 147 ret = job.run()
148 if isinstance(ret, CancelJob) or ret is CancelJob:
149 self.cancel_job(job)
/usr/local/lib/python3.7/dist-packages/schedule/init.py in run(self)
489 """
490 logger.debug('Running job %s', self)
--> 491 ret = self.job_func()
492 self.last_run = datetime.datetime.now()
493 self._schedule_next_run()
<ipython-input-5-27f2e83c975b> in scrayping()
13
14 page_1_b = soup1.find("div", {"class":"main-inner-b"})
---> 15 title_1_b = page_1_b.find("h3").text.replace("\u3000","").replace("\n","")
16 overview_1_b = page_1_b.find("p").text.replace("\u3000","").replace("\n","")
17 link_1_b = page_1_b.find("a").get("href")
AttributeError: 'NoneType' object has no attribute 'find'
該当のソースコード
全文記載させていただきます。
・関数の定義
・キーワードのインプット受け付け
・スケジュールモジュールで定時処理
といった構成です。
長文失礼いたします。
python
1def scrayping(): 2 3#page_1 4 5 result1 = requests.get(url1) 6 c1 = result1.content 7 soup1 = BeautifulSoup(c1) 8 9 if soup1.find("div", {"class":"main-inner-a"}) is None: 10 title_1_a = [] 11 overview_1_a = [] 12 link_1_a = [] 13 else: 14 page_1_a = soup1.find("div", {"class":"main-inner-a"}) 15 title_1_a = page_1_a.find("h3").text.replace("\u3000","").replace("\n","") 16 overview_1_a = page_1_a.find("p").text.replace("\u3000","").replace("\n","") 17 link_1_a = page_1_a.find("a").get("href") 18 19 if soup1.find("div", {"class":"main-inner-b"}) is None: 20 title_1_b = [] 21 overview_1_b = [] 22 link_1_b = [] 23 else: 24 page_1_b = soup1.find("div", {"class":"main-inner-b"}) 25 title_1_b = page_1_b.find("h3").text.replace("\u3000","").replace("\n","") 26 overview_1_b = page_1_b.find("p").text.replace("\u3000","").replace("\n","") 27 link_1_b = page_1_b.find("a").get("href") 28 29 title_1_c = [] 30 overview_1_c = [] 31 link_1_c = [] 32 33 try: #cが8個ない場合に対応 34 for i in range(8): 35 page_1_c = soup1.find_all("div", {"class":"main-inner-c"})[i] 36 37 tmp_title = page_1_c.find("h3").text.replace("\u3000","").replace("\n","") 38 title_1_c.append(tmp_title) 39 40 tmp_overview = page_1_c.find_all("p")[2].text.replace("\u3000","").replace("\n","") 41 overview_1_c.append(tmp_overview) 42 43 tmp_link = page_1_c.find("a").get("href") 44 link_1_c.append(tmp_link) 45 46 i += 1 47 except: 48 pass 49 50 title_1_all = pd.DataFrame([title_1_a, title_1_b] + title_1_c) 51 overview_1_all = pd.DataFrame([overview_1_a, overview_1_b] + overview_1_c) 52 link_1_all = pd.DataFrame([link_1_a, link_1_b] + link_1_c) 53 54 page1_df = pd.concat([title_1_all, overview_1_all, link_1_all], axis=1) 55 56#page_2 57 58 result2 = requests.get(url2) 59 c2 = result2.content 60 soup2 = BeautifulSoup(c2) 61 62 title_2_c = [] 63 overview_2_c = [] 64 link_2_c = [] 65 66 try: #cが8個ない場合に対応 67 for i in range(10): 68 page_2_c = soup2.find_all("div", {"class":"main-inner-c"})[i] 69 70 tmp_title = page_2_c.find("h3").text.replace("\u3000","").replace("\n","") 71 title_2_c.append(tmp_title) 72 73 tmp_overview = page_2_c.find_all("p")[2].text.replace("\u3000","").replace("\n","") 74 overview_2_c.append(tmp_overview) 75 76 tmp_link = page_2_c.find("a").get("href") 77 link_2_c.append(tmp_link) 78 79 i += 1 80 except: 81 pass 82 83 title_2_all = pd.DataFrame(title_2_c) 84 overview_2_all = pd.DataFrame(overview_2_c) 85 link_2_all = pd.DataFrame(link_2_c) 86 87 page2_df = pd.concat([title_2_all, overview_2_all, link_2_all], axis=1) 88 89#page_3 90 91 result3 = requests.get(url3) 92 c3 = result3.content 93 soup3 = BeautifulSoup(c3) 94 95 title_3_c = [] 96 overview_3_c = [] 97 link_3_c = [] 98 99 try: #cが8個ない場合に対応 100 for i in range(10): 101 page_3_c = soup3.find_all("div", {"class":"main-inner-c"})[i] 102 103 tmp_title = page_3_c.find("h3").text.replace("\u3000","").replace("\n","") 104 title_3_c.append(tmp_title) 105 106 tmp_overview = page_3_c.find_all("p")[2].text.replace("\u3000","").replace("\n","") 107 overview_3_c.append(tmp_overview) 108 109 tmp_link = page_3_c.find("a").get("href") 110 link_3_c.append(tmp_link) 111 112 i += 1 113 except: 114 pass 115 116 title_3_all = pd.DataFrame(title_3_c) 117 overview_3_all = pd.DataFrame(overview_3_c) 118 link_3_all = pd.DataFrame(link_3_c) 119 120 page3_df = pd.concat([title_3_all, overview_3_all, link_3_all], axis=1) 121 122#total 123 124 page_df = pd.concat([page1_df, page2_df, page3_df], axis=0,ignore_index=True) 125 page_df.columns=["Title","Overview","Link"] 126 page_df.index = np.arange(1, len(page_df)+1) 127 128 page_df.to_excel("result.xlsx") 129 130 today = datetime.datetime.now() 131 today = str(today.year) + "_" + str(today.month) + "_" + str(today.day) + "_" + str(today.hour) 132 133 path1 = 'result.xlsx' 134 path2 = today + "_" + keyword + "_" + period + "_" +'result.xlsx' 135 136 os.rename(path1, path2) 137 138#キーワード受け付け 139 140keyword = input("検索ワードを入力してください。") #Free 141period = input("monthかweekかdayを入力してください。") #[month, week, day] 142 143url1 = "https://runda.jp/search/?q=" + keyword + "&page=1&search_type=" + period 144url2 = "https://runda.jp/search/?q=" + keyword + "&page=2&search_type=" + period 145url3 = "https://runda.jp/search/?q=" + keyword + "&page=3&search_type=" + period 146 147#繰り返し自動処理 148 149schedule.every(1).day.at("10:30").do(scrayping) 150 151while True: 152 schedule.run_pending() 153 time.sleep(10) 154
試したこと
関数の定義、関数単体での実行は問題なく作動したのですが
scheduleで処理した際に上手くいかない状態です。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/02/24 06:58
2021/02/24 07:37
2021/02/24 08:05
2021/02/24 08:24
2021/02/24 08:50