当我从 Mercadoline 发出请求时。在“我的浏览器”中返回所有结果,在本例中为 35。
但是,如果我使用 NodeJS 或 Postman 的请求模块发出此请求,我只会收到 20 个结果(来自在线市场的产品),并且所有页面都会发生这种情况。
我已在 html //div[@class='name']//a//text()
中应用了此 xpath。
有人知道为什么会这样吗?
最佳答案
这是因为页面加载后,会发送Ajax请求来获取产品列表,并在获取到产品列表数据后替换页面内容。
以下是一些详细说明:
当浏览器访问URL时你提供的。发送
GET
请求并检索 HTML 文件。在此文件中,有 20 个结果。在 Node.js 或 Postman 中,这正是发生的情况:检索 HTML 资源,仅此而已。在浏览器中,页面加载后,会发送 Ajax 请求:
POST https://www.mercadoline.com.br/salvador/index.php?route=module/journal2_super_filter/products&module_id =13
。 Ajax 响应返回包含 35 个结果的 HTML block 。- 网站中的脚本获取这 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/