2017-02-06 4 views
3

Im einen Antrag für einen Parameter site_search_url zu machen versucht, aber ich bekomme die folgende Fehlermeldung, wenn ich laufen: ``:Scrapy Code wirft Typeerror: 'NoneType' Objekt nicht iterable ist

start_requests = iter(self.spider.start_requests()) 
TypeError: 'NoneType' object is not iterable 

Code:

class BrickSetSpider(scrapy.Spider): 
    def __init__(self, site_search_url): 
     self.site_search_url = site_search_url 

    def start_requests(self): 
     se_base = 'http://www.se.com/search?q=site:' 
     start_urls = [ se_base + self.site_search_url, ] 

    def parse(self, response): 
     yield scrapy.Request(
      response.urljoin(next_page), 
      callback=self.parse 
     ) 

Was mache ich hier falsch?

Danke

+0

Der Fehler ist einfach, dass 'start_requests' keine explizite Anweisung return hat und so gibt' None'. Sie versuchen dann, über den Rückgabewert zu iterieren. Um es aufzulösen, gib einfach etwas zurück, das von "start_requests" iterierbar ist. Ich bin nicht genug in deinen Code eingeweiht, um vorzuschlagen, was er zurückgeben könnte. –

Antwort

6

Ihre start_requests kehrt nichts, die Renditen None in Python bedeuten, während es eine iterable von Request Objekte zurückgeben sollte. In Ihrem Fall ist am einfachsten start_urls in __init__ aufzufüllen und start_requests nicht überschreiben:

class BrickSetSpider(scrapy.Spider): 
    se_base = 'http://www.se.com/search?q=site:' 
    def __init__(self, site_search_url): 
     self.start_urls = [self.se_base + site_search_url] 

    def parse(self, response): 
     yield scrapy.Request(
      response.urljoin(next_page), 
      callback=self.parse 
     ) 
Verwandte Themen