python scrapy如何删除额外的解析字符

时间:2012-05-01 17:11:16

标签: python scrapy

在使用scrapy的解析过程中,我找到了这个输出

  

[u'TARTARINI AUTO SPA(CENTRALINO SELEZIONE PASSANTE)',“[u'VCBONAZZI \ xa043',u'40013',u'CASTEL MAGGIORE']”,[u'0516322411'],[u' info@tartariniauto.it'],[u'CARS(LPG INSTALLERS)'],[u'track.aspx?id = 0& url = http://www.tartariniauto.it']

如你所见,有一些额外的角色,如

  

你'\ xa043“'[]

我不想要。 我怎样才能删除这些? 此字符串中还有5个项目。我希望字符串看起来像这样:

  

item1,item2,item3,item4,item5

这是我的pipelines.py代码

from scrapy.contrib.loader import ItemLoader
from scrapy.contrib.loader.processor import TakeFirst, MapCompose, Join
import re
import json
import csv

class InfobelPipeline(object):
    def __init__(self):
      self.file = csv.writer(open('items.csv','wb'))
    def process_item(self, item, spider):
      name = item['name']
      address = item['address']
      phone = item['phone']
      email = item['email']
      category = item['category']
      website = item['website']
      self.file.writerow((name,address,phone,email,category,website))
    return item

由于

1 个答案:

答案 0 :(得分:5)

您看到的额外字符是unicode字符串。如果你正在网上搜索,你会看到很多。常见示例包括版权符号:©unicode point U+00A9或商标符号™unicode point U+2122

删除它们的最快方法是尝试将它们编码为ascii,如果它们不是ascii字符(它们都不是),则将它们抛弃

>>> example = u"Xerox ™ printer"
>>> example
u'Xerox \u2122 printer'
>>> example.encode('ascii')
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2122' in position 6: ordinal 
not in range(128)
>>> example.encode('ascii', errors='ignore')
'Xerox  printer'
>>>

正如您所看到的,当您尝试将符号解码为ascii时,它会引发UnicodeEncodeError,因为该字符无法在ascii中表示。但是,如果添加errors='ignore'关键字参数,则只会忽略它无法编码的符号。