2017-07-08 87 views
0

這是我的代碼?爲什麼scrapy yield.Request()沒有遞歸?

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的新手。我認爲這將總是遞歸的,但實際上它不是。那是爲什麼?

+0

你是什麼意思與遞歸? – eLRuLL

回答

1

這裏的問題是,scrapy使用allowed_domains作爲一個正則表達式來確定通過的鏈接是否屬於指定的域。

只要將字符串quotes.toscrape.com/更改爲quotes.toscrape.com如果您只想允許來自該特定子域的請求。

如果您希望允許來自每個域的請求,也可以刪除整個變量。