1

在使用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 个项目。我希望字符串看起来像这样:

项目 1 , 项目 2 , 项目 3 , 项目 4 , 项目 5

这是我的 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

谢谢

4

1 回答 1

5

您看到的额外字符是 unicode 字符串。如果你在网上抓取,你会经常看到它们。常见示例包括版权符号:© unicode pointU+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 时,它会引发 a UnicodeEncodeError,因为该字符无法用 ascii 表示。但是,如果您添加errors='ignore'关键字参数,那么它将简单地忽略它无法编码的符号。

于 2012-05-01T17:22:41.117 回答