我正在抓取this website ,我需要的大部分数据都是用Ajax渲染的。

我一开始尝试用 Ruby 来抓取它(因为它是我最了解的语言),但没有成功。 然后我被建议用Python和Scrapy来做,我尝试过,但我不明白为什么我不能获取数据。

import scrapy 
 
class TaricSpider(scrapy.Spider): 
    name = 'taric' 
    allowed_domains = ['ec.europa.eu/taxation_customs/dds2/taric/measures.jsp?Lang=en&Taric=01042090&SimDate=20190912'] 
    start_urls = ['http://ec.europa.eu/taxation_customs/dds2/taric/measures.jsp?Lang=en&Taric=01042090&SimDate=20190912/'] 
 
    def parse(self, response): 
        code = response.css(".td_searhed_criteria::text").extract() 
        tarifs = response.xpath("//div[contains(@class, 'measures_detail')]").extract_first() 
 
print(code) 
print(test) 

当我在终端上运行此命令时,我得到了 code 的尝试结果,但对于 tarifs 我得到了“None”。

您知道我的代码有什么问题吗?我尝试过不同的抓取方式,但没有任何效果。 也许 xpath 不正确?或者也许我的 Python 语法很糟糕,因为我试图抓取这个网页,所以我只使用 Python。

请您参考如下方法:

您的 XPath 不起作用的原因 - 因为此数据是从 AJAX 请求添加的。如果您在浏览器中打开开发控制台并移至 Network->XHR - 您将看到 AJAX 请求。那么有2种可能的解决方案: 1. 在脚本中手动发出此请求 2.像Splash一样使用Js渲染 在这种情况下,使用 Splash 将是最简单的,因为 AJAX 的响应是 Js 文件,并且并非所有数据都显示在那里。 另外,我建议您查看 Aquarium,这是一个包含 Splash、HAProxy 和 docker-compose 的工具


评论关闭
IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!