検索サイト(*規約確認済)内で、情報をスクレイピングしたいのですが、調べながら作成した以下のコードでは次ページの情報まで取得できません。(10/17 21:48)コードを再度改めてみましたが、エラーは出なくなりましたが、ページ遷移しません。中身も取れていません。
(10/10 23:38)
listにテキスト抽出を命じていたので、ページ遷移箇所を書き直したら今度はプログラムが終わりません。
どうぞ宜しくお願いします。
python 10/17編集済み
1import time 2from selenium import webdriver 3driver=webdriver.Chrome() 4 5driver.get('https://www.mrso.jp/searches/?redirect&view=plan') 6 7def search(driver): 8 i = 1 # ループ番号、ページ番号を定義 9 i_max = 5 # 最大何ページまで分析するかを定義 10 courses_list=[] 11 facili_list=[] 12 price_list=[] 13 link_list=[] 14 next_list=[] 15 16 # 現在のページが指定した最大分析ページを超えるまでループする 17 while i <= i_max: 18 class_group =driver.find_elements_by_class_name('page-search__wrap.facility') 19 # タイトルとリンクを抽出しリストに追加するforループ 20 for elem in class_group: 21 courses_list.append(elem.find_element_by_class_name('-name').text) 22 for elem in class_group: 23 facili_list.append(elem.find_element_by_class_name('-facility-name').text) 24 for elem in class_group: 25 price_list.append(elem.find_element_by_class_name('-price').text) 26 for elem in class_group: 27 link_list.append(elem.find_element_by_class_name('-link').get_attribute('href')) 28 29 # 「次へ」は1つしかないが、あえてelementsで複数検索。空のリストであれば最終ページの意味になる。 30 for elem in class_group: 31 next_list=elem.find_elements_by_class_name('-item -next') 32 if next_list==[]: 33 i = i_max + 1 34 else: 35 next_list.click() 36 i = i + 1 # iを更新 37 time.sleep(3) # 3秒間待機 38 return courses_list,facili_list, price_list,link_list # タイトルとリンクのリストを戻り値に指定 39 40courses_list,facili_list,price_list,link_list=search(driver) 41 42
どの行でのエラーですか?
下記の行です。ただ、その前が長い関数の定義なので、実行した結果、関数の中身について言われている気がします。
courses_list,facili_list,price_list,link_list=search(driver)
search.quit()
エラーメッセージに行番号が出ていると思うのですが?
下記のように出ますが、11行目と32行目かもしれません。
InvalidSelectorException: Message: invalid selector: Compound class names not permitted
(Session info: chrome=86.0.4240.75)
(Driver info: chromedriver=2.38.552522 (437e6fbedfa8762dec75e2c5b3ddb86763dc9dcb),platform=Windows NT 10.0.18363 x86_64)
11行目と32行目を指摘しているように見えます。
32 courses_list,facili_list,price_list,link_list=search(driver)
11 class_group =driver.find_elements_by_class_name('page-search__wrap facility')
<エラー文全て>
---------------------------------------------------------------------------
InvalidSelectorException Traceback (most recent call last)
<ipython-input-5-500fd912a0d6> in <module>
30 time.sleep(3) # 3秒間待機
31 return courses_list,facili_list, price_list,link_list # タイトルとリンクのリストを戻り値に指定
---> 32 courses_list,facili_list,price_list,link_list=search(driver)
33 search.quit()
<ipython-input-5-500fd912a0d6> in search(driver)
9 # 現在のページが指定した最大分析ページを超えるまでループする
10 while i <= i_max:
---> 11 class_group =driver.find_elements_by_class_name('page-search__wrap facility')
12 # タイトルとリンクを抽出しリストに追加するforループ
13 for elem in class_group:
~\Anaconda3\lib\site-packages\selenium\webdriver\remote\webdriver.py in find_elements_by_class_name(self, name)
578 elements = driver.find_elements_by_class_name('foo')
579 """
--> 580 return self.find_elements(by=By.CLASS_NAME, value=name)
581
582 def find_element_by_css_selector(self, css_selector):
~\Anaconda3\lib\site-packages\selenium\webdriver\remote\webdriver.py in find_elements(self, by, value)
1005 return self.execute(Command.FIND_ELEMENTS, {
1006 'using': by,
-> 1007 'value': value})['value'] or []
1008
1009 @property
~\Anaconda3\lib\site-packages\selenium\webdriver\remote\webdriver.py in execute(self, driver_command, params)
319 response = self.command_executor.execute(driver_command, params)
320 if response:
--> 321 self.error_handler.check_response(response)
322 response['value'] = self._unwrap_value(
323 response.get('value', None))
~\Anaconda3\lib\site-packages\selenium\webdriver\remote\errorhandler.py in check_response(self, response)
240 alert_text = value['alert'].get('text')
241 raise exception_class(message, screen, stacktrace, alert_text)
--> 242 raise exception_class(message, screen, stacktrace)
243
244 def _value_or_default(self, obj, key, default):
InvalidSelectorException: Message: invalid selector: Compound class names not permitted
(Session info: chrome=86.0.4240.75)
(Driver info: chromedriver=2.38.552522 (437e6fbedfa8762dec75e2c5b3ddb86763dc9dcb),platform=Windows NT 10.0.18363 x86_64)
回答2件
あなたの回答
tips
プレビュー