【发布时间】:2021-04-28 17:51:39
【问题描述】:
我一直在尝试从 Doordash 中抓取动态内容(餐厅名称、评级、餐厅类型),我想要抓取的不仅仅是一个网站,而是多个网站,可能在一个 100 到 1000 个页面上Doordash 上的单个域。
我得到了一个“单次刮擦”,但是,当我使用下面的代码时,它给了我一个很长的错误
def ScrapeDoorDash(df):
for i in df:
url = df[i]
print(url)
driver = webdriver.Chrome(ChromeDriverManager().install())
driver.get(url)
restaurantname = driver.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[2]/div/div[1]/header/div[2]/h1').text
rating = driver.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[2]/div/div[1]/header/div[2]/div[1]/div[3]/div/span[1]').text
#estauranttype = driver.find_element_by_xpath('//*[@id="root"]/div/div[1]/div[2]/div/div[1]/header/div[2]/div[1]/div[1]/span').text
#Store into / print Out
print (restaurantname, rating, restauranttype)
XPath 已经正确,但我注意到 Selenium 每次都会打开 chrome,让它在抓取内容之前完成加载。在我上面提供的代码中,我注意到在第一页加载完成之前已经弹出了错误。
有没有办法实现一些代码来“暂停 for 循环”,让它在移动到“URL 数据帧”中的下一个项目之前先加载和抓取?
请使用以下创建 URL 数据框
url = ["https://www.doordash.com/store/popeyes-toronto-254846/en-CA", "https://www.doordash.com/store/sunset-grill-toronto-211003/en-CA"]
url = pd.DataFrame(数据) 网址
错误消息如下(它更长)。它说没有这样的元素,但是,当页面完成加载时,我单独尝试了它,找到了这些元素并抓取了正确的内容。只是当我尝试抓取多个页面时,它给了我一个错误。
任何帮助将不胜感激!
【问题讨论】:
标签: python selenium web-scraping