2017-07-08 1 views
0

hier ist mein code?warum die scrapy yield.Request() nicht rekursiv?

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) 

Ich bin neu zu scrapy. Ich denke, das wird immer rekursiv. Aber eigentlich hat es nicht. Deshalb?

+0

was meinst du mit rekursiv? – eLRuLL

Antwort

1

Das Problem hier ist, dass scrapy verwendet als Regex für die Bestimmung, ob die durchgehenden Verbindungen gehören zu der angegebenen Domäne.

ändern Sie einfach die Zeichenfolge quotes.toscrape.com/ zu quotes.toscrape.com, wenn Sie nur Anfragen von dieser bestimmten Subdomain zulassen möchten.

Sie können diese gesamte Variable auch entfernen, wenn Sie Anfragen von jeder Domäne zulassen möchten.