2016-05-16 11 views
2

Ich versuche Artikel Loader in scrapy zu studieren, dieser Code unten funktioniert nicht richtig: es gibt mir nur die "start_url" Wert und nicht die "SUBJECT" und "CREATOR2" Wert (sie erscheinen überhaupt nicht, es gibt nicht nur einen leeren Schlitz). Ich kann nicht herausfinden, warum das so ist.Artikel Loader funktioniert nicht richtig in scrapy

Ich brauche Item Loader speziell für den "CREATOR2" -Wert, der manchmal auf einem XPath und manchmal auf einem anderen ist.

Sie sind alle in der Datei Elemente benannt und der Xpath funktioniert gut auf einem Tester.

EDIT: Als Wunsch, hier ist der Artikel Definition:

import scrapy 
from scrapy.item import Item, Field 
from scrapy.loader import ItemLoader 
from scrapy.contrib.loader.processor import Identity 


class BibtimeItem(Item): 
    CREATOR2 = Field() 
    SUBJECT = Field() 
    start_url = Field() 
    pass 

class BibtimeLoader(ItemLoader): 
    #default_input_processor = Identity() 
    default_output_processor = Identity() 

Antwort

3

Ich würde stattdessen die | (oder) innerhalb eines XPath verwenden. Verwenden Sie auch den unteren Mantelfeldnamen:

l.add_xpath('creator2', '//font[@size="+1"]/center//preceding-sibling::text()[normalize-space()] | //link[@rel="schema.DC"]//meta[@name="DC.creator"]//@content[normalize-space()]') 

auch, wenn Sie den XPath-Ausdrücke in der Scrapy Shell überprüfen würden, würden Sie feststellen, dass sie eigentlich nichts entsprechen:

$ scrapy shell http://www.aib.it/aib/sezioni/emr/bibtime/num-i-1/bucchion.htm 
>>> response.xpath('//font[@size="+1"]/center//preceding-sibling::text()[normalize-space()]') 
[] 
>>> response.xpath('//link[@rel="schema.DC"]//meta[@name="DC.creator"]//@content[normalize-space()]') 
[] 

Ich vermute Dies geschieht wegen der Art und Weise Scrapy und lxml analysiert diese bestimmte nicht gut formatierte HTML. Sie müssen Ihre Ausdrücke optimieren, z. B .:

>>> response.xpath('//center/text()').extract_first() 
u'Cinzia Bucchioni' 
+0

Vielen Dank! aber es funktioniert sowieso nicht. –

+0

@LaraM. Sind Sie sicher, dass die XPath-Ausdrücke korrekt sind? Veröffentlichen Sie auch die Artikel- und die Artikelladerdefinition. Vielen Dank. – alecxe

+0

Die Element- und Loader-Definition hinzugefügt. Ja, ich bin mir ziemlich sicher, hier ist eine Beispielseite: view-source: http: //www.aib.it/aib/sezioni/emr/bibtime/num-i-1/bucchion.htm –