5

我正在尝试使用 scrapy 来抓取网站,但该网站没有站点地图或页面索引。如何用scrapy抓取网站的所有页面?

我只需要下载网站的所有页面而不提取任何项目。我只需要设置跟随蜘蛛规则中的所有链接吗?但我不知道scrapy是否会以这种方式避免复制url。

4

2 回答 2

5

我自己找到了答案。有了这个CrawlSpider类,我们只需要allow=()SgmlLinkExtractor函数中设置变量。正如文档所说

allow (a regular expression (or list of)) – 一个正则表达式(或正则表达式列表),(绝对)url 必须匹配才能被提取。如果未给出(或为空),它将匹配所有链接。

于 2013-01-12T19:24:41.420 回答
4

在您的Spider中,定义allowed_domains为您要抓取的域列表。

class QuotesSpider(scrapy.Spider):
    name = 'quotes'
    allowed_domains = ['quotes.toscrape.com']

然后,您可以使用response.follow()以下链接。请参阅Spiders 的文档教程

或者,您可以使用 a 过滤域LinkExtractor(如David Thompson 提到的)。

from scrapy.linkextractors import LinkExtractor

class QuotesSpider(scrapy.Spider):

    name = 'quotes'
    start_urls = ['http://quotes.toscrape.com/page/1/']

    def parse(self, response):
        for quote in response.css('div.quote'):
            yield {
                'text': quote.css('span.text::text').get(),
                'author': quote.css('small.author::text').get(),
                'tags': quote.css('div.tags a.tag::text').getall(),
            }
        for a in LinkExtractor(allow_domains=['quotes.toscrape.com']).extract_links(response):
            yield response.follow(a, callback=self.parse)
于 2019-07-02T18:19:08.140 回答