【问题标题】:Scrape JSON response with Selenium使用 Selenium 抓取 JSON 响应
【发布时间】:2021-09-05 17:30:48
【问题描述】:

我是 Selenium 的新手,正在努力从 JSON 中提取数据。我尝试了多种工具,但都没有成功,巧合的是,我似乎可以通过 API 访问数据,但它被分成了成千上万的页面。

我想自动进行以下操作:

  • 提取“title”或“slug”、“reviews”、“star_rating”、“listing_price”、“pretty_price”
  • 提取“next_is_after”并将其与“https://api.takealot.com/rest/v-1-10-0/searches/products,filters,facets,sort_options,breadcrumbs,slots_audience,context,seo? "加载它并从头开始提取。从上面的总结来看,这可能会发生 10 万次。

我非常感谢任何指向正确方向的指针。我已经无法提取数据。因此,如果您可以通过以下内容为我指明正确的方向,那已经很有帮助了。

import requests
res = requests.get('https://api.takealot.com/rest/v-1-10-0/searches/products,filters,facets,sort_options,breadcrumbs,slots_audience,context,seo?').json()

for data in res:
    print(data["next_is_after"])

【问题讨论】:

  • 如果您添加了指向 API 文档的链接,那就太好了。这是一个非常复杂的 JSON 响应。您需要了解 JSON 文件的结构。我建议分别对“section_keys”中的每个类别提出几个请求。这将使您能够处理更小、更简单的 JSON 结构化响应。
  • 谢谢丹尼尔。不幸的是,我不知道这个 API 的公共文档,我只是在 Chrome 中查看 Network>XHR 时偶然发现它,所以我什至认为公众不应该像我想要的那样使用它。我会多玩一些,希望我能解决一些问题。

标签: python python-3.x selenium


【解决方案1】:

响应 json 是对象的对象。所以你需要相应地获取数据。

解决方案:

import requests
res = requests.get('https://api.takealot.com/rest/v-1-10-0/searches/products,filters,facets,sort_options,breadcrumbs,slots_audience,context,seo?').json()

next_is_after = res['sections']['products']['paging']['next_is_after']

for data in res['sections']['products']['results']:
    name, slug, reviews, star_rating, listing_price, pretty_price = data['product_views']['core']['title'], data['product_views']['core']['slug'], data['product_views']['core']['reviews'], data['product_views']['core']['star_rating'], data['product_views']['buybox_summary']['listing_price'], data['product_views']['buybox_summary']['pretty_price']
    print(name, slug, reviews, star_rating, listing_price, pretty_price)

print("Next is after : ", next_is_after)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-12
    • 1970-01-01
    • 2018-01-28
    • 1970-01-01
    • 2013-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多