在 python 中使用字符串会产生奇怪的引号

Upv*_*ote 2 python xpath

目前我正在使用scrapy,这是一个基于 python 的网络爬虫框架。使用XPATH从 html 中提取数据。(我是Python新手)要包装数据scrapy使用项目,例如

\n\n
item = MyItem()\n\nitem[\'id\'] = obj.select(\'div[@class="id"]\').extract()\n
Run Code Online (Sandbox Code Playgroud)\n\n

当打印 id 时,print item[\'id\']我得到以下输出

\n\n
[u\'12346\']\n
Run Code Online (Sandbox Code Playgroud)\n\n

我的问题是这个输出并不总是采用相同的形式。有时我会得到类似的输出

\n\n
"[u""someText""]"\n
Run Code Online (Sandbox Code Playgroud)\n\n

这种情况仅发生在文本中,但实际上,与像 ID 一样正确处理的其他文本相比,该文本没有什么特别之处。

\n\n

有谁知道引号是什么意思吗?就像我说的, someText 像所有其他文本数据一样被爬行,例如来自

\n\n
<a>someText</a>\n
Run Code Online (Sandbox Code Playgroud)\n\n

有任何想法吗?

\n\n

编辑:

\n\n

我的蜘蛛会爬行博客的所有页面。这是确切的输出

\n\n
[u\'41039\'];[u\'title]\n\n[u\'40942\'];"[u""title""]"]\n\n...\n
Run Code Online (Sandbox Code Playgroud)\n\n

提取与

\n\n
item[\'title\']   = site.select(\'div[@class="header"]/h2/a/@title\').extract()\n
Run Code Online (Sandbox Code Playgroud)\n\n

我注意到相同的博客文章总是带有这个引号。所以它们并不是随机出现的。但文字并没有什么特别之处。例如这个标题产生引号

\n\n
<a title="Xtra Pac Telekom web\'n\'walk Stick Basic f\xc3\xbcr 9,95" href="someURL">\n    Xtra Pac Telekom web\'n\'walk Stick Basic f\xc3\xbcr 9,95</a>\n
Run Code Online (Sandbox Code Playgroud)\n\n

所以我的第一个想法是这是因为一些特殊的字符,但实际上没有。

\n\n

仅当项目写入 csv 时才会发生这种情况,当我在 cmd 中打印它们时,没有引号。

\n\n

有任何想法吗?

\n

and*_*oke 5

python 可以使用单'和双"引号作为引号。当它打印出某些内容时,它通常会选择单引号,但如果它打印的文本包含单引号,则会切换到双引号(以避免必须转义中的引号)细绳):

所以通常情况下,它正在打印[u'....'],但有时您的文本包含'字符,然后它会打印[u"...."]

然后写入 csv 会出现额外的复杂情况。如果将字符串写入仅包含'的 csv ,则按原样写入。所以[u'....']写成[u'....'].

但如果它包含双引号,则 (1) 所有内容都放在双引号内,并且 (2) 任何双引号都会重复两次。所以u["..."]写成"[u""...""]". 如果您使用 csv 库读回 csv 数据,那么这将被检测到并删除,因此不会导致任何问题。

所以它是包含单引号的文本(使 python 使用双引号)和 csv 引用规则(适用于双引号,但不适用于单引号)的组合。

如果这是一个问题,csv 库有各种选项来改变行为 - http://docs.python.org/library/csv.html

维基百科页面更详细地解释了引用规则 - 这里的行为由示例显示"Super, ""luxurious"" truck"