我目前正试图在这个page上刮掉汽车的链接 .
我在chrome控制台上运行了这个xpath命令,以返回每辆车的链接
$x('//div[@class="vehicle-make-model"]/h3/a/@href')
但是,当我尝试使用相同的xpath时,在使用scrapy shell命令时,它不会返回任何链接 . 这是我为scrapy shell命令运行的代码
response.xpath('//div[@class="vehicle-make-model"]/h3/a/@href')
有人能指出我做错了什么吗?
1 回答
在Chrome中运行的XPath运行在使用JavaScript构建的DOM之上 . 这就是为什么有时一件事在Chrome中起作用但在scrapy shell中不起作用的原因 .
您链接的页面就是这种情况 . 如果您查看页面的来源(右键单击并选择“查看页面源”或按Ctrl-U),您将看到Scrapy获得的相同数据 .
在这种特殊情况下,数据似乎都在一个JSON块中,因此您可以提取JSON代码并使用python的JSON模块解析它,例如:
然后,您可以使用
json_data
中的数据构建下一个请求或刮取您需要的任何内容 .如果没有一个易于解析的JSON,另一个选择是使用js2xml库将JavaScript解析成一个你可以使用XPath抓取的XML .