为什么scrapy yield.Request()没有Recursive?

时间:2017-07-08 09:30:58

标签: python-3.x scrapy web-crawler

这是我的代码?

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

def parse(self, response):
    quotes = response.css('.quote')
    for quote in quotes:
        item = QuoteItem()
        text = quote.css('.text::text').extract_first()
        author = quote.css('.author::text').extract_first()
        tags = quote.css('.tags .tag::text').extract()
        item['text'] = text
        item['author'] = author
        item['tags'] = tags
        yield item

    next = response.css('.pager .next a::attr(href)').extract_first()
    url = response.urljoin(next)
    yield scrapy.Request(url=url, callback=self.parse)

我是scrapy的新手。我认为这总是递归的。但事实上它并没有。这就是为什么?

1 个答案:

答案 0 :(得分:1)

这里的问题是scrapy使用allowed_domains作为正则表达式来确定传递的链接是否属于指定的域。

如果您只想允许来自该特定子域的请求,只需将字符串quotes.toscrape.com/更改为quotes.toscrape.com

如果您想允许来自每个域的请求,也可以删除整个变量。