我正在尝试从https://www.doordash.com/food-delivery/chicago-il-restaurants/抓取数据
这个想法是刮掉有关网站上不同餐厅列表的所有数据。该网站分为不同的城市,但我只需要 芝加哥 的餐厅数据。
该城市的所有餐厅列表都必须与各个餐厅的其他任何相关数据(例如:评论,评分,美食,地址,州等)一起进行抓取。我需要在Excel中捕获城市的所有相应详细信息(当前4,326个列表)。
我试图在名为“ StoreCard_root___1p3uN”的类中提取餐厅名称,美食,评分和评论。但是没有显示任何数据。输出为空白。
from selenium import webdriver
chrome_path = r"D:\python project\chromedriver.exe"
driver = webdriver.Chrome(chrome_path)
driver.get("https://www.doordash.com/food-delivery/chicago-il-restaurants/")
driver.find_element_by_xpath("""//*[@id="SeoApp"]/div/div[1]/div/div[2]/div/div[2]/div/div[2]/div[1]/div[3]""").click()
posts = driver.find_elements_by_class_name("StoreCard_root___1p3uN")
for post in posts:
print(post.text) ```
答案 0 :(得分:1)
您可以使用API
url作为实际通过XHR
请求从其呈现的数据。
在下面的API
链接和scrape
上重复您想要的内容。
您只需将参数offset=0
每次增加+50就可以遍历该参数,因为每个页面将显示50
个项目,直到您到达4300
作为最后一页!只需通过range(0, 4350, 50)
import requests
import pandas as pd
data = []
for item in range(0, 4350, 50):
print(f"Extracting item# {item}")
r = requests.get(
f"https://api.doordash.com/v2/seo_city_stores/?delivery_city_slug=chicago-il-restaurants&store_only=true&limit=50&offset={item}").json()
for item in r['store_data']:
item = (item['name'], item['city'], item['category'],
item['num_ratings'], item['average_rating'], item['average_cost'])
data.append(item)
df = pd.DataFrame(
data, columns=['Name', 'City', 'Category', 'Num Ratings', 'Average Ratings', 'Average Cost'])
df.to_csv('output.csv', index=False)
print("done")
输出样本:
在线查看输出:Click Here
完整数据在这里:Click Here
答案 1 :(得分:0)
您可以在导入必要的库后使用 for 循环:
restaurant = []
location = []
ratings = []
card_grids = driver.find_elements_by_class_name("StoreCard_root___1p3uN")
for i in card_grids:
restaurant.append(i.find_element_by_class_name("StoreCard_storeTitle___1tIOi").text)
location.append(i.find_element_by_class_name("StoreCard_storeInfo___3EpLG").text)
s = i.find_elements_by_class_name("StoreCard_storeReviews___8EiRe")
for e in s:
ratings.append(e.text)