2016-05-22 91 views
0

enter image description here如何使用XPath找到

我使用廢料得到堆棧溢出的用戶信息文本節點。我嘗試使用//h2[@class="user-card-name"]/text()[1]來獲得該名稱。但我得到這個:

['\n       Ignacio Vazquez-Abrams\n       \n 

有人PLZ的幫助。

+1

這其中肯定是@ IgnacioVazquez-艾布拉姆斯的問題。 – alecxe

回答

1

您應該能夠清理周圍從結果空格容易使用Python的strip()功能:

In [2]: result = response.xpath('//h2[@class="user-card-name"]/text()[1]').extract() 

In [3]: [r.strip() for r in result] 
Out[3]: [u'Ignacio Vazquez-Abrams'] 
1

與scrapy爬行非結構化數據時推薦的方法是使用ItemLoaders,並scrapylib提供了一些非常好的default_input_processordefault_output_processor

items.py

from scrapy import Item, Field 
from scrapy.loader import ItemLoader 
from scrapylib.processors import default_input_processor 
from scrapylib.processors import default_output_processor 

class MyItem(Item): 
    field1 = Field() 
    field2 = Field() 

class MyItemLoader(ItemLoader): 
    default_item_class = MyItem 

    default_input_processor = default_input_processor 
    default_output_processor = default_output_processor 
現在

你的蜘蛛的代碼,以填充您的項目:

from myproject.items import MyItemLoader 


... 
... # on your callback 


    loader = MyItemLoader(response=response) 
    loader.add_xpath('field1', '//h2[@class="user-card-name"]/text()[1]') 

    ... keep populating the loader 

    yield loader.load_item() # to return an item 
0

試試這個:

result = response.xpath('//h2[@class="user-card-name"]/text()').extract() 
result = result[0].strip() if result else ''