我正在尝试使用https://www.ta.com/portfolio/business-services中的scrapy抓取数据,但是响应为NULL。我希望使用代码response.css("div.tiles.js-portfolio-tiles a::attr(href)").extract()
在div.tiles js-portfolio-tiles中刮取href
我认为这与之前出现的::before
有关,但也许没有。我该如何提取呢? website HTML
答案 0 :(得分:1)
浏览器会使用javascript加载您要检索的元素。默认情况下scrapy不能使用javascript加载元素,因为它不是浏览器,它只是检索原始HTML。
Scrapy shell是检查Scrapy收到的响应中可用内容的宝贵工具。
这组命令将在默认的Web浏览器中打开响应:
$ scrapy shell
>>> fetch("https://www.ta.com/portfolio/business-services")
>>> view (response)
您会看到js-portfolio磁贴不可见,因为它们尚未加载。
我在开发人员工具的网络面板中查看了AJAX请求,似乎您需要的信息可能在XHR请求中可用。如果不是,那么您将需要使用其他软件来加载javascript,即scrapy splash或selenium,我建议您先探索AJAX(XHR)请求,因为这样做会更快,更轻松。
有关使用浏览器开发工具检查AJAX请求的其他详细信息,请参见此question。