seleniumを使ったスクレイピングを行いたいです。
こちらのサイトのリストになっている各お店のURLをfor文を使って取得したいのですが
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":".a"}(Session info: headless chrome=84.0.4125.0)
とエラーが出てしまいます。
どうすれば各お店のURLを取得できますか?
何か必要なものがあれば追記します。よろしくお願いします。
python
1from selenium import webdriver #seleniumのimport 2from selenium.webdriver.chrome.options import Options 3from selenium.webdriver.common.action_chains import ActionChains 4from selenium.webdriver.common.alert import Alert 5from selenium.common.exceptions import NoAlertPresentException 6from time import sleep 7import traceback 8import pandas as pd 9 10 11 12def video(): 13 number_lists = pd.DataFrame() 14 num = 1 15 try: 16 options = Options() 17 options.binary_location = '/Applications/Chromium.app/Contents/MacOS/Chromium' 18 options.add_argument('--headless') 19 20 driver = webdriver.Chrome(options=options) 21 driver.get("https://r.gnavi.co.jp/area/hokkaido/rs/") 22 sleep(10) 23 parentElement = driver.find_elements_by_class_name("result-cassette__list")[1].find_elements_by_tag_name("li") 24 sleep(5) 25 26 for i in parentElement: 27 sleep(5) 28 li_link = i.find_element_by_class_name('a').get_attribute('href') 29 driver.get(li_link) 30 31 driver.close() 32 except: 33 traceback.print_exc() 34 driver.quit() 35 36video() 37
#追記
python
1def main(): 2 try: 3 options = Options() 4 options.binary_location = '/Applications/Chromium.app/Contents/MacOS/Chromium' 5 options.add_argument('--headless') 6 7 driver = webdriver.Chrome(options=options) 8 driver.get("https://r.gnavi.co.jp/area/hokkaido/rs/") 9 sleep(5) 10 parentElement = driver.find_elements_by_class_name("result-cassette__list")[1].find_elements_by_tag_name('li') 11 sleep(5) 12 print(parentElement) 13 for i in parentElement: 14 sleep(5) 15 li_links = i.find_element_by_tag_name('a').get_attribute('href') 16 print(li_links) 17 driver.close() 18 except: 19 traceback.print_exc() 20 driver.quit() 21 22main() 23
#成功
上記のコードだとresult-cassette__item
に入っている<li>
を全て取得していたので、数が多くエラーの原因になっていたと思います。
クラス名を指定すると欲しいものだけ取得する事ができました。
もっと簡単な方法があれば教えていただけると幸いです。
python
1def main(): 2 try: 3 options = Options() 4 options.binary_location = '/Applications/Chromium.app/Contents/MacOS/Chromium' 5 options.add_argument('--headless') 6 7 driver = webdriver.Chrome(options=options) 8 driver.get("https://r.gnavi.co.jp/area/hokkaido/rs/") 9 sleep(5) 10 parentElement = driver.find_elements_by_class_name("result-cassette__wrapper")[1].find_elements_by_class_name('result-cassette__item') 11 sleep(5) 12 for i in parentElement: 13 sleep(5) 14 li_links = i.find_element_by_tag_name('a').get_attribute('href') 15 print(li_links) 16 driver.close() 17 except: 18 traceback.print_exc() 19 driver.quit() 20 21main() 22
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/26 23:53
2020/08/27 04:30 編集
2020/08/27 04:46
2020/08/27 07:09
2020/08/27 12:45