####状況
WebScrapingの勉強をしています。
試しにスターバックスコーヒーの店舗一覧(名前+住所)を取得しようとしています。
(https://store.starbucks.co.jp/?keyword=)
なおrobots.txtは下記の通り、スクレイピングは禁止されていません。
User-Agent: *
Sitemap: https://store.starbucks.co.jp/sitemap.xml
####問題
スタバのHPはJavascriptを使用しており、「もっと見る」ボタンをクリックしないと、すべての店舗が表示されない仕様になっています。
そこでseleniumを使用し.click()機能を使用し、全件表示を試みました。
しかし、下記に詳細を記載した通り、WebDriverExceptionが出てしまいます。
どたなか、対処法がお分かりになる方、アドバイス頂けますと幸いです。
どうぞよろしくお願いいたします。
####コード
Python
1import requests 2import time 3import csv 4import pandas as pd 5 6from selenium import webdriver 7from selenium.common.exceptions import ElementNotInteractableException 8from bs4 import BeautifulSoup 9 10#クロームをヘッドレスで立上げ、スタバHPを取得 11options = webdriver.ChromeOptions() 12options.add_argument('--no-sandbox') 13options.add_argument('--headless') 14options.add_argument('--disable-dev-shm-usage') 15driver = webdriver.Chrome(options=options) 16 17driver.get("https://store.starbucks.co.jp/?keyword=") 18time.sleep(1) 19html = driver.page_source 20soup = BeautifulSoup(html, 'lxml') 21 22#最後まで「もっと見る」ボタンをクリック 23while True: 24 try: 25 more_btn = driver.find_element_by_xpath('//*[@id="moreList"]') 26 more_btn.click() 27 time.sleep(1) 28 except ElementNotInteractableException: 29 break 30 31 32#店舗リストを取得する 33detailContainers = soup.find_all('div', class_="detailContainer") 34 35storeNames=[] 36storeAddresses=[] 37 38for detailContainer in detailContainers: 39 storeNames += [detailContainer.find(class_='storeName').get_text()] 40 storeAddresses += [detailContainer.find(class_='storeAddress').get_text()] 41 42storeList = pd.DataFrame( 43 { 44 'storeName':storeNames, 45 'storeAddress':storeAddresses, 46 } 47 ) 48 49print(storeList)
####エラーログ
[vagrant@localhost scraping]$ python scraping_starbucks.py Traceback (most recent call last): File "scraping_starbucks.py", line 26, in <module> more_btn.click() File "/home/vagrant/.local/lib/python3.6/site-packages/selenium/webdriver/remote/webelementpy", line 80, in click self._execute(Command.CLICK_ELEMENT) File "/home/vagrant/.local/lib/python3.6/site-packages/selenium/webdriver/remote/webelementpy", line 633, in _execute return self._parent.execute(command, params) File "/home/vagrant/.local/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.y", line 321, in execute self.error_handler.check_response(response) File "/home/vagrant/.local/lib/python3.6/site-packages/selenium/webdriver/remote/errorhandlr.py", line 242, in check_response raise exception_class(message, screen, stacktrace) selenium.common.exceptions.WebDriverException: Message: unknown error: session deleted becaus of page crash from unknown error: cannot determine loading status from tab crashed (Session info: headless chrome=85.0.4183.121)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/26 13:37
2020/11/27 02:46