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