使用 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'),
我正在尝试抓取一个网站,搜索所有 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'),