使用 Scrapy 抓取原始 javascript 和 css 文件

Scraping raw javascript and css files with Scrapy

我想用 Scrapy 抓取给定域上的所有 linked javascript 和 css 文件。问题是我不太明白如何从 link 元素中提取 links。

假设我正在抓取 example.com。有 links 到 js 和 css 的形式:

<link rel="stylesheet" href="/path_to_css/example.css"/>
<script src="/path_to_js/example.js"></script>

这些 links 从根域开始,所以没问题。但是如果 links 像下面的那些,它开始变得混乱:

<link rel="stylesheet" href="path_to_css/example.css"/>
<script src="path_to_js/example.js"></script>

这些相对 URL 应该可以工作,这样如果我在 example.com/some_page/ 上,link 路径会附加到它,例如:example.com/some_page/path_to_js/example.js。然而,在实际网页中并非总是如此。在某些带有语言选择的网站上,例如 example.com/en/some_page,相对路径从 example.com/en 开始,而不是该页面的完整路径。

因此,虽然期望在 example.com/en/some_page/path_to_js/example.js 找到文件,但您在 example.com/en/path_to_js/example.js

找到了它们

有什么方法可以了解相对路径从哪里开始?

在抓取时,Scrapy 允许您从相对 URL

创建绝对 URL

你可以这样做

for link in response.css("link"):
    response.urljoin(link.css("::attr(href)").extract_first())

for script in response.css("script"):
    response.urljoin(script.css("::attr(src)").extract_first())