【问题标题】:Web Scraping API - "See the scroll api for a more efficient way to request large data sets."Web Scraping API - “请参阅滚动 API 以更有效地请求大型数据集。”
【发布时间】:2020-07-26 16:38:44
【问题描述】:

我正在尝试抓取该网站,https://www.huntr.co/jobs,它有大约 100 万个列表。我检查并发现该网站已加载 ajax,因此决定使用其 API(https://app.huntr.co/public/search/job-posts?page=1)抓取该网站。该网站以 json 格式加载数据,当我更改“page=”时,我会得到一个包含新数据的新页面。但是每当我越过“page = 332”时,API 都会在 json 中给出以下消息:

{"message":"[query_phase_execution_exception] Result window is too large, from + size must be less 
than or equal to: [10000] but was [30030]. See the scroll api for a more efficient way to request 
large data sets. This limit can be set by changing the [index.max_result_window] index level 
setting.","error":{"status":500}

我不明白什么是滚动 api 以及如何请求它。由于这个错误,我只能从 100 万个列表中抓取大约 10,000 个列表。我在这个项目中使用 python。任何解决方案都将受到高度赞赏!

【问题讨论】:

标签: python api web-scraping beautifulsoup


【解决方案1】:

该网站使用无限滚动机制来获取数据,即当您向下滚动页面时,将发送一个带有下一个页码的 ajax 调用。

由于您事先不知道页数,如果您知道总结果和每页的结果数,则可以粗略计算页数。

然后你可以用类似的二进制搜索方式手动尝试最后一页在哪里。

所以,最后一页是332。页面333给出错误响应

【讨论】:

  • 总结果约为100万,结果数为30。所以计算,没有。页数 = 1 000 000 / 30 = 33 333。但不幸的是 app.huntr.co/public/search/job-posts?page=33333> 给出了与以前相同的结果!
  • @mustaqSHAH Google 也提供了如此多的分页搜索,但它也知道没有人可以超越某个页面。因此,虽然显示他们说了这么多结果,但在内部他们只会计算某些页面的结果
猜你喜欢
  • 1970-01-01
  • 2017-05-07
  • 2021-09-04
  • 2016-06-20
  • 2015-08-08
  • 2020-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多