【问题标题】:How to scrape a data from a dynamic website containing Javascript using Python?如何使用 Python 从包含 Javascript 的动态网站中抓取数据?
【发布时间】:2019-12-05 10:13:44
【问题描述】:

我正在尝试从 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) ```


【问题讨论】:

  • 您的问题是什么?您在尝试从该网站抓取数据时是否收到错误消息?如果是这样,请告诉我们您要解决的错误。我不明白你需要什么
  • 让你的生活更轻松!使用 API api.doordash.com/v2/seo_city_stores/…

标签: javascript excel python-3.x selenium-webdriver web-scraping


【解决方案1】:

您可以使用API url 作为实际通过XHR 请求从它呈现的数据。

遍历下面的API 链接和scrape 任何你想要的。

https://api.doordash.com/v2/seo_city_stores/?delivery_city_slug=chicago-il-restaurants&store_only=true&limit=50&offset=0

您将遍历此参数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

【讨论】:

  • 评论不用于扩展讨论;这个对话是moved to chat
  • 我们如何获取地址?
【解决方案2】:

我也遇到过这个问题,但我使用 selenium 和 BeautifulSoup 通过执行以下操作解决了它:

  1. 确保算法在必要时单击按钮以显示菜单和价格
  2. 必须处理菜单和价格,因为它们可能会在从解析中提取出来后作为嵌套列表出现,因此 get_text() 函数不会立即对它们起作用。 代码和解释可以在这篇中篇文章中找到

Tackling empty list web scraping with selenium

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-18
    • 2021-11-29
    相关资源
    最近更新 更多