我使用廢料得到堆棧溢出的用戶信息文本節點。我嘗試使用//h2[@class="user-card-name"]/text()[1]
來獲得該名稱。但我得到這個:
['\n Ignacio Vazquez-Abrams\n \n
有人PLZ的幫助。
我使用廢料得到堆棧溢出的用戶信息文本節點。我嘗試使用//h2[@class="user-card-name"]/text()[1]
來獲得該名稱。但我得到這個:
['\n Ignacio Vazquez-Abrams\n \n
有人PLZ的幫助。
您應該能夠清理周圍從結果空格容易使用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']
與scrapy爬行非結構化數據時推薦的方法是使用ItemLoaders,並scrapylib
提供了一些非常好的default_input_processor
和default_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
試試這個:
result = response.xpath('//h2[@class="user-card-name"]/text()').extract()
result = result[0].strip() if result else ''
這其中肯定是@ IgnacioVazquez-艾布拉姆斯的問題。 – alecxe