【问题标题】:Working with strings in python produces strange quotation marks在 python 中使用字符串会产生奇怪的引号
【发布时间】:2011-09-01 18:13:19
【问题描述】:

目前我正在使用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中打印它们时没有引号。

有什么想法吗?

【问题讨论】:

  • 字符串是否总是发生这种情况?你能把它分解成一个你可以发布的特定测试用例吗?
  • 这些输出是您复制和粘贴的吗?你是在打印某些东西的 reprs 和其他东西的正常 str 版本吗?

标签: python xpath


【解决方案1】:

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

通常,它会打印[u'....'],但有时您的文本包含 ' 字符,然后它会打印[u"...."]

那么写入 csv 会有一个额外的复杂性。如果将字符串写入仅包含 ' 的 csv,则按原样写入。所以[u'....']写成[u'....']

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

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

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

wikipedia page 更详细地解释了引用规则 - 此处的行为由 "Super, ""luxurious"" truck" 的示例显示

【讨论】:

    猜你喜欢
    • 2016-02-14
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 2021-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多