Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python scrapy如何删除额外的已解析字符_Python_Scrapy - Fatal编程技术网

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

python scrapy如何删除额外的已解析字符,python,scrapy,Python,Scrapy,在使用scrapy的解析过程中,我发现了以下输出 [u'TARTARINI AUTO SPA(CENTRALINO SELEZIONE PASSANTE)”,[u'V.C.BONAZZI\xa043',u'40013',u'CASTEL MAGGIORE'],[u'051632411',[u'info@tartariniauto.it“],[u'CARS(LPG安装工)”,[u'track.aspx?id=0&url=http://www.tartariniauto.it“] 正如你看到的,还有

在使用scrapy的解析过程中,我发现了以下输出

[u'TARTARINI AUTO SPA(CENTRALINO SELEZIONE PASSANTE)”,[u'V.C.BONAZZI\xa043',u'40013',u'CASTEL MAGGIORE'],[u'051632411',[u'info@tartariniauto.it“],[u'CARS(LPG安装工)”,[u'track.aspx?id=0&url=http://www.tartariniauto.it“]

正如你看到的,还有一些额外的角色,比如

u'\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

谢谢

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

删除它们的最快方法是尝试将它们编码为ascii,如果它们不是ascii字符(它们中没有一个是ascii字符),则将它们丢弃

示例=u“Xerox™ 打印机“ >>>范例 u'Xerox\u2122打印机' >>>示例.encode('ascii') 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 UnicodeEncodeError:“ascii”编解码器无法对位置6:序号中的字符u'\u2122'进行编码 不在范围内(128) >>>示例.encode('ascii',errors='ignore') “施乐打印机” >>>
正如您所看到的,当您尝试将符号解码为ascii时,它会引发一个
unicodeincodeerror
,因为字符不能用ascii表示。但是,如果您添加
errors='ignore'
关键字参数,那么它只会忽略无法编码的符号。

您看到的额外字符是unicode字符串。您将如果你在网上浏览,经常可以看到它们。常见的例子包括版权符号:©unicode point
U+00A9
,或商标符号™ unicode点
U+2122

删除它们的最快方法是尝试将它们编码为ascii,如果它们不是ascii字符(它们中没有一个是ascii字符),则将它们丢弃

示例=u“Xerox™ 打印机“ >>>范例 u'Xerox\u2122打印机' >>>示例.encode('ascii') 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 UnicodeEncodeError:“ascii”编解码器无法对位置6:序号中的字符u'\u2122'进行编码 不在范围内(128) >>>示例.encode('ascii',errors='ignore') “施乐打印机” >>>
如您所见,当您尝试将符号解码为ascii时,它会引发一个
unicodeincodeerror
,因为该字符不能用ascii表示。但是,如果您添加
errors='ignore'
关键字参数,那么它只会忽略无法编码的符号。

只需迭代字符串并删除a)每个当您
str()时,at会抛出一个错误
it或B)高于某个序数的每个字符。@JoelCornett这很不符合pythonic我担心你问的是如何删除方括号和引号之类的东西?也就是说,你问的是如何从封装的列表中删除字符串,或者你已经将它们输出到外部文件并重新读取它们?所有这类工作都应该是B爱德华:那么,你建议怎么做?我保证你提出的任何解决方案都会涉及到我刚才提到的内容。它是不是pythonic,只取决于你使用的内置代码的组合。@JoelCornett对不起,我不是很认真。我的观点是was-为什么要在
“data”时添加一个额外的循环。encode('ascii',error='ignore')
可以吗?只需迭代字符串并删除A)在
str()时抛出错误的每个字符
it或B)高于某个序数的每个字符。@JoelCornett这很不符合pythonic我担心你问的是如何删除方括号和引号之类的东西?也就是说,你问的是如何从封装的列表中删除字符串,或者你已经将它们输出到外部文件并重新读取它们?所有这类工作都应该是B爱德华:那么,你建议怎么做?我保证你提出的任何解决方案都会涉及到我刚才提到的内容。它是不是pythonic,只取决于你使用的内置代码的组合。@JoelCornett对不起,我不是很认真。我的观点是was-为什么在
“data.encode('ascii',error='ignore')时添加额外的循环
可以吗?这是编辑好的。但是有一次显示了这一点。@MarufRahman一个
索引器
位于
0
位置意味着数组是空的。如果项的行为类似于内置的
dict
,我不记得Scrapy
项是否可以,那么你可以将
项['xx'][0]
替换为
项。get('xx',[''])
每一行。这对我来说有点粗鲁。无论如何,答案是+1。@MarufRahman抱歉,我错过了示例中的一对括号。
website=item.get('website',[''])[0]。encode('ascii',errors='ignore'))
正是您想要的。如果最终答案是正确的,请随时将我的答案标记为正确。;-)这是编辑后的工作状态良好。但有一次显示了这一点。@MarufRahman在
0
位置的
索引器
表示数组为空。如果项的行为类似于内置的
dict
,我记不起是否有零碎的
项,那么您可以将
项['xx'][0]
交换为
项。获取('xx',[''''''')
每一行。这对我来说有点粗鲁。无论如何,答案是+1。@MarufRahman抱歉,我错过了示例中的一对括号。
website=item.get('website',[''])[0]。编码('ascii',errors='ignore')
是你想要的。如果答案最终正确,请随意标记我的答案为正确。;-)
>>> 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'
>>>