源HTML-Python Scrapy

源HTML-Python Scrapy,python,html,scrapy,Python,Html,Scrapy,我一直在使用python和scrapy以及selenium(必要时)进行web抓取。我最新的项目是从各种网站上用UPC来比较价格。通常,只要进行一点故障排除,我就可以模仿XHR请求,或者在scrapy在源HTML中看不到价格时使用selenium来呈现页面。然而,Lowe的网站完全把我难住了。示例url应重定向到某些AAA电池的页面。试图从html中获取价格的一个棘手的部分是,所提供的源html似乎以完全随机的间隔进行更改。例如,以下两个代码段成功地获得了大约50%的价格: price = '$

我一直在使用python和scrapy以及selenium(必要时)进行web抓取。我最新的项目是从各种网站上用UPC来比较价格。通常,只要进行一点故障排除,我就可以模仿XHR请求,或者在scrapy在源HTML中看不到价格时使用selenium来呈现页面。然而,Lowe的网站完全把我难住了。示例url应重定向到某些AAA电池的页面。试图从html中获取价格的一个棘手的部分是,所提供的源html似乎以完全随机的间隔进行更改。例如,以下两个代码段成功地获得了大约50%的价格:

price = '$' + response.xpath('//div[@id="atc"]/input/@data-productprice').get()
#OR
price = response.xpath('//script[@type="application/ld+json"]/text()').get()
script = chompjs.parse_js_object(price)
price = "$" + str(script[2]["offers"]["price"])
top调用从一个div获取价格,该div有时在源代码中呈现,但有时价格仅在javascript文本中,因此如果第一个调用返回null,第二个调用应该捕获它。然而,在测试时,我发现javascript中的字段有时也有空值。如果一小时后我在同一组UPC上运行相同的脚本,一些产品将突然不再在这些字段中显示null,但其他不是突然显示的产品将显示null。我尝试的下一步是尝试使用selenium呈现页面。但是,即使复制了浏览器中的每个cookie,价格字段也不会加载,而是显示一个位置选择框。通过使用私有浏览器,我能够验证,如果在发生这种情况时设置了“sn”(商店编号)cookie,则可以刷新页面并加载价格。因此,在获取价格之前,我尝试用selenium刷新页面,但出现了403个错误。此外,我搜索了chrome请求加载价格,但我在任何回复中都找不到价格,只有几个url位于包含价格的瀑布下方

所以说真的,我有三个问题:

  • 为什么服务器可以在相同url的相同cookie和用户代理配置下提供不同的html

  • 在刷新调用之前,是否有方法在selenium中轮换我的用户代理

  • 如果在浏览器对请求的任何响应中都找不到响应值,那么当响应值未加载到源html中时,如何跟踪这些请求

任何信息都将不胜感激,因为这个问题似乎是谷歌和这里的搜索功能开始让我失望的地方。如果需要的话,我非常愿意尝试一种新的实用工具(例如,splash是否能帮助我进行这些工作?我看不出它与selenium有什么不同,但我对它知之甚少,无法说这两种方法)