我正在努力刮this webpage(为了教育目的)
当我提取xpath并在浏览器的元素检查器中尝试它时,它就可以工作了。 例如,为了获取地址,我使用下面的xpath:
//div[@class="address-coords"]/div[@class="address"]/p/span[@itemprop="address"]
同时,在scrapy shell中,它不起作用:
$ scrapy shell 'https://cloud.baladovore.com/map/sNRgAcGKiY' -s U
SER_AGENT='Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, l
ike Gecko) Chrome/46.0.2490.80 Safari/537.36'
In [5]: response.xpath('//div[@class="address-coords"]/div[@class="address"]/p/span[@it
...: emprop="address"]').getall()
Out[5]: []
我得到一个空列表,虽然回答是200:
In [6]: response
Out[6]: <200 https://cloud.baladovore.com/map/008jPJuORI>
我已经尝试了我在网上找到的所有建议。例如更改用户代理,将ROBOTSTXT\u OBEY设置为False,并增加延迟。 如果有人帮我解决这个问题,我会非常感激,因为我已经做了好几天了
如果您使用scrapy shell查看响应的内容(使用
response.body
),您将看到服务器用一个充满脚本的小页面进行响应,然后执行这些脚本因此,您要么需要一种使用Scrapy运行Javascript的方法,要么直接查询服务器以获得结果。使用浏览器的开发工具(网络)是检查这些查询的常用方法(如linked answer中所述)
另一种解决方案是使用Selenium来模拟完整的浏览器
编辑1:你需要做的不仅仅是https://cloud.baladovore.com/parse/classes/Address
如果检查请求,您将看到它不仅请求该页面,还提供其他信息:
让我们用
requests
来模拟一下:这将输出您可以处理的解码json响应
我不知道
_JavaScriptKey
的属性。你需要调查一下如果您坚持使用Srapy,则需要阅读documentation中关于如何设置请求主体的内容
相关问题 更多 >
编程相关推荐