我正在抓取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 的工具