Scrapy:为什么提取的字符串采用这种格式?

rea*_*ebo 7 python scrapy

我正在做

item['desc'] = site.select('a/text()').extract()
Run Code Online (Sandbox Code Playgroud)

但这将打印出来

[u'\n                    A mano libera\n                  ']
Run Code Online (Sandbox Code Playgroud)

我必须做些什么来消除和删除像[u'\n,traling space和']这样的奇怪字符?

我无法修剪(剥离)

exceptions.AttributeError: 'list' object has no attribute 'strip'
Run Code Online (Sandbox Code Playgroud)

如果转换为字符串然后剥离,结果是上面的字符串,我想它是UTF-8

Cap*_*iel 9

使用Item Loaders有一个很好的解决方案.项目加载器是从响应中获取数据,处理数据和为您构建项目的对象.这是一个Item Loader的示例,它将剥离字符串并返回与XPath匹配的第一个值(如果有):

from scrapy.contrib.loader import XPathItemLoader
from scrapy.contrib.loader.processor import MapCompose, TakeFirst

class MyItemLoader(XPathItemLoader):
    default_item_class = MyItem
    default_input_processor = MapCompose(lambda string: string.strip())
    default_output_processor = TakeFirst()
Run Code Online (Sandbox Code Playgroud)

你这样使用它:

def parse(self, response):
    loader = MyItemLoader(response=response)
    loader.add_xpath('desc', 'a/text()')
    return loader.load_item()
Run Code Online (Sandbox Code Playgroud)


ice*_*ime 8

html页面可能很好地包含这些空格字符.

您检索unicode字符串列表的原因,这就是为什么您不能简单地调用strip它.如果要从此列表中的每个字符串中删除这些空格字符,可以运行以下命令:

>>> [s.strip() for s in [u'\n                    A mano libera\n                  ']]
[u'A mano libera']
Run Code Online (Sandbox Code Playgroud)

如果只有第一个元素对你很重要,那么只需:

>>> [u'\n                    A mano libera\n                  '][0].strip()
u'A mano libera'
Run Code Online (Sandbox Code Playgroud)