使用 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())
我想用 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())