【问题标题】:How to use xpath to find a text node如何使用 xpath 查找文本节点
【发布时间】:2016-09-19 02:22:14
【问题描述】:

我正在使用废料来获取有关堆栈溢出的用户信息。我尝试使用//h2[@class="user-card-name"]/text()[1] 来获取该名称。但是我明白了:

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

请有人帮忙。

【问题讨论】:

  • 这绝对是@IgnacioVazquez-Abrams 的问题。

标签: xpath scrapy web-crawler lxml


【解决方案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']

【讨论】:

    【解决方案2】:

    使用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
    

    【讨论】:

      【解决方案3】:

      试试这个:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-04-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多