我正在做
item['desc'] = site.select('a/text()').extract()
但是会像这样打印
[u'\n A mano libera\n ']
我必须做些什么来消除和删除像[u' \ n,traling space和']这样的奇怪字符?
我无法修剪(剥离)
exceptions.AttributeError: 'list' object has no attribute 'strip'
如果转换为字符串然后剥离,结果是上面的字符串,我想这是UTF-8
答案 0 :(得分: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'
答案 1 :(得分:8)
使用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()
你这样使用它:
def parse(self, response):
loader = MyItemLoader(response=response)
loader.add_xpath('desc', 'a/text()')
return loader.load_item()
答案 2 :(得分:1)
desc = site.select('a/text()').extract()
desc=[s.strip() for s in desc]
item['desc']=desc[0]