我使用scrap来获取有关堆栈溢出的用户信息。我尝试使用//h2[@class="user-card-name"]/text()[1]
来获取该名称。但是我得到了这个:
['\n Ignacio Vazquez-Abrams\n \n
有人帮助。
答案 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_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
答案 2 :(得分:0)
试试这个:
result = response.xpath('//h2[@class="user-card-name"]/text()').extract()
result = result[0].strip() if result else ''