javascript - 请求返回的结果少于我的爬网程序中页面实际的结果

标签 javascript http web-crawler

当我从 Mercadoline 发出请求时。在“我的浏览器”中返回所有结果,在本例中为 35。

但是,如果我使用 NodeJS 或 Postman 的请求模块发出此请求,我只会收到 20 个结果(来自在线市场的产品),并且所有页面都会发生这种情况。

我已在 html //div[@class='name']//a//text() 中应用了此 xpath。

有人知道为什么会这样吗?

最佳答案

这是因为页面加载后,会发送Ajax请求来获取产品列表,并在获取到产品列表数据后替换页面内容。

以下是一些详细说明:

  1. 当浏览器访问URL时你提供的。发送 GET 请求并检索 HTML 文件。在此文件中,有 20 个结果。在 Node.js 或 Postman 中,这正是发生的情况:检索 HTML 资源,仅此而已。

  2. 在浏览器中,页面加载后,会发送 Ajax 请求: POST https://www.mercadoline.com.br/salvador/index.php?route=module/journal2_super_filter/products&module_id =13。 Ajax 响应返回包含 35 个结果的 HTML block 。

  3. 网站中的脚本获取这 35 个结果并替换页面内容。这就是您在浏览器中看到 35 个结果的原因。

要在爬虫中获取真实结果,需要向 https://www.mercadoline.com.br/salvador/index.php?route= 发送 POST HTTP 请求module/journal2_super_filter/products&module_id=13,而不是页面的地址。

关于javascript - 请求返回的结果少于我的爬网程序中页面实际的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44029268/

相关文章:

php - PayPal IPN 沙箱返回 HTTP 302

php - 无法让谷歌抓取 AJAX Hashbang 网站

elasticsearch - Stormcrawler -> Elasticsearch 的最佳设置,如果爬行的礼貌不是问题?

jquery - 如何使用 jquery 一次关闭多个弹出窗口?

javascript - 单击时如何选择(此)图像?

http - 如何在 Classic ASP 中将 HTTP 发布数据发送到 Web 中的任何页面?

ios - 将 CURL 转换为 Swift 以在 Alamofire 中使用

javascript - jsp中可以更改referer吗?或者如何更改referer?

javascript - 为什么google map用Canvas做距离测量而不是SVG?

javascript - 如何在 jQuery 中查找父级的数据值