7

我正在做

item['desc'] = site.select('a/text()').extract()

但这会像这样打印

[u'\n                    A mano libera\n                  ']

我必须做些什么来定时和删除奇怪的字符,如 [u'\n 、 traling 空格和 '] ?

我不能修剪(条)

exceptions.AttributeError: 'list' object has no attribute 'strip'

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

4

3 回答 3

9

使用Item Loaders有一个很好的解决方案。项目加载器是从响应中获取数据、处理数据并为您构建项目的对象。这是一个项目加载器的示例,它将剥离字符串并返回与 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()

你像这样使用它:

def parse(self, response):
    loader = MyItemLoader(response=response)
    loader.add_xpath('desc', 'a/text()')
    return loader.load_item()
于 2013-06-10T23:50:38.580 回答
8

html 页面很可能包含这些空白字符。

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

>>> [s.strip() for s in [u'\n                    A mano libera\n                  ']]
[u'A mano libera']

如果只有第一个元素对您很重要,那么只需执行以下操作:

>>> [u'\n                    A mano libera\n                  '][0].strip()
u'A mano libera'
于 2013-06-08T14:48:30.647 回答
1
desc = site.select('a/text()').extract()
desc=[s.strip() for s in desc]
item['desc']=desc[0]
于 2016-07-18T11:32:52.417 回答