如何使用xpath查找文本节点

时间:2016-05-22 02:54:28

标签: xpath scrapy web-crawler lxml

enter image description here

我使用scrap来获取有关堆栈溢出的用户信息。我尝试使用//h2[@class="user-card-name"]/text()[1]来获取该名称。但是我得到了这个:

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

有人帮助。

3 个答案:

答案 0 :(得分: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 :(得分: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

答案 2 :(得分:0)

试试这个:

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