2012-10-03 17 views
5

Znalazłem odpowiedź, poniżej. W skrócie, nieprawidłowe wcięcie w ItemPipeline spowodowało, że zwrócił Brak.Scrapy Spider zwraca Brak zamiast pozycji

Próbowałem napisać CrawlSpider w Scrapy, nigdy wcześniej nie pracowałem z Pythonem. Pająk indeksuje, wywołuje funkcję wywołania zwrotnego, wyodrębnia dane i wypełnia element, ale zawsze zwraca Brak. Przetestowałem to z zaproszeniem do druku, wszystko było w porządku. Próbowałem tego zarówno z zyskiem, jak iz powrotem (chociaż nadal nie rozumiem różnicy). Szczerze mówiąc, nie mam pomysłów. Na dole jest function.//edit zwrotna dodaniu kodu pająk także

class ZeitSpider(CrawlSpider): 
name= xxxx 
allowed_domains = ['example.com'] 
start_urls = ['http://www.example.com/%d/%d' %(JAHR,39)] 
rules = (Rule(SgmlLinkExtractor(restrict_xpaths=('//ul[@class="teaserlist"]/li[@class="archiveteaser"]/h4[@class="title"]')),callback='parse_url',follow=True),) 

def parse_url(self,response): 

    def parse_url(self,response): 
    hxs = HtmlXPathSelector(response) 

    article = Article() 

    article['url']= response.url.encode('UTF-8',errors='strict') 

    article['author']= hxs.select('//div[@id="informatives"]/ul[@class="tools"]/li[@class="author first"]/text()').extract().pop().encode('UTF-8',errors='strict') 
    article['title']= hxs.select('//div[@class="articleheader"]/h1/span[@class="title"]/text()').extract().pop().encode('UTF-8',errors='strict') 

    article['text']= hxs.select('//div[@id="main"]/p/text()').extract().pop().encode('UTF-8',errors='strict') 

    article['excerpt'] = hxs.select('//p[@class="excerpt"]/text()').extract().pop().encode('UTF-8',errors='strict') 
    yield article 

oraz definicji elementu

class Article(Item): 
    url=Field() 
    author=Field() 
    text=Field() 
    title=Field() 
    excerpt=Field() 

Odpowiedz

2

Ok, po wejściu w ramach programu z WPB znalazłem błąd:

Ponieważ mam wiele pająków, chciałem napisać wiele ItemPipelines. Aby je rozróżnić na Spider, dodałem Zwróć uwagę na wcięcie. Pipeline zwrócił Nothing, a więc wynik stał się None.

Po zmianie wcięcia pająk zadziałał bezbłędnie. Kolejny przykład PEBCAC.

+0

DZIĘKUJEMY. Komunikat o błędzie: Obiekt 'NoneType 'nie ma atrybutu" iterkeys ". Może to pomoże w przekierowaniu Google tutaj. – KrisWebDev

Powiązane problemy