使用 Scrapy 下载所有 JS 文件?

Downloading all JS files using Scrapy?

我正在尝试抓取一个网站,搜索所有 JS 文件以下载它们。 我是 Scrapy 的新手,我发现我可以使用 CrawlSpider,但似乎我的 LinkExtractors 有问题,因为我的解析器没有执行。

import scrapy
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor

class JSDownloader(CrawlSpider):
  name = 'jsdownloader'
  allowed_domains = ['example.com']
  start_urls = ['http://example.com']


  rules = (
    Rule(LinkExtractor(allow=('\.js', )), callback='parse_item'),
  ))

  def parse_item(self, response):
    self.logger.info('JS File %s', response.url)
    item = scrapy.Item()
    # Process Item here
    yield item

您可以提取所有 script 标签并进行简单的筛选以获取 js 文件。

试试这个:

import scrapy

class JSDownloader(scrapy.Spider):
  name = 'jsdownloader'
  allowed_domains = ['example.com']
  start_urls = ['http://example.com']

  def parse(self, response):
    hrefs = response.xpath('//script/@href').extract()
    js_links = [href for href in hrefs if href.endswith('.js')]

    # do stuff with the list of js links here, i.e fetch and download them
    
    yield {'js_links': js_links}

我发现 LinkExtractor 有 tags 和 attrs 参数,默认情况下仅适用于 'a' 和 'area' 标签。 LinxExtractor Documentation

所以解决方案是添加''标签:

Rule(LinkExtractor(tags=('a', '<script>'), attrs('href','src')), callback='parse_item'),