目前我正在与 scrapy 合作,这是一个基于python的网络爬虫框架。使用 XPATH 从 html 中提取数据。 (我是Python新手)要包装数据scrapy使用项目,例如
item = MyItem()
item['id'] = obj.select('div[@class="id"]').extract()
当 id 像 print item['id']
一样打印时,我得到以下输出
[u'12346']
我的问题是这个输出并不总是采用相同的形式。有时我会得到类似的输出
"[u""someText""]"
这种情况仅发生在文本中,但实际上,与像 ID 一样正确处理的其他文本相比,该文本没有什么特别之处。
有人知道引号是什么意思吗?就像我说的,someText 像所有其他文本数据一样被爬行,例如来自
<a>someText</a>
有什么想法吗?
编辑:
我的蜘蛛会爬行博客的所有页面。这是确切的输出
[u'41039'];[u'title]
[u'40942'];"[u""title""]"]
...
提取方式
item['title'] = site.select('div[@class="header"]/h2/a/@title').extract()
我注意到相同的博客文章总是带有这个引号。所以它们并不是随机出现的。但文字并没有什么特别之处。例如。该标题产生引号
<a title="Xtra Pac Telekom web'n'walk Stick Basic für 9,95" href="someURL">
Xtra Pac Telekom web'n'walk Stick Basic für 9,95</a>
所以我的第一个想法是这是因为一些特殊字符,但实际上没有。
只有当项目写入 csv 时才会发生这种情况,当我在 cmd 中打印它们时,没有引号。
有什么想法吗?
最佳答案
python 可以使用单引号 ' 和双引号 " 作为引号。当它打印出某些内容时,它通常会选择单引号,但如果它正在打印的文本包含单引号(以避免必须转义字符串中的引号):
通常情况下,它会打印 [u'....']
但有时您的文本包含 ' 字符,然后它会打印 [你“....”]
.
然后写入 csv 会出现额外的复杂情况。如果写入 csv 的字符串仅包含 ',则按原样写入。因此 [u'....']
写为 [u'....']
。
但如果它包含双引号,则 (1) 所有内容都放在双引号内,并且 (2) 任何双引号都会重复两次。因此 u["..."]
写作 "[u""...""]"
。如果您使用 csv 库读回 csv 数据,那么这将被检测到并删除,因此不会导致任何问题。
所以它是包含单引号的文本(使 python 使用双引号)和 csv 引用规则(适用于双引号,但不适用于单引号)的组合。
如果这是一个问题,csv 库有各种选项来更改行为 - http://docs.python.org/library/csv.html
wikipedia page更详细地解释了报价规则 - 此处的行为由 “ super ,“豪华”卡车”
关于python - 在 python 中使用字符串会产生奇怪的引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7274592/