【问题标题】:How to remove foreign escaped quotes from string? Python如何从字符串中删除外国转义引号? Python
【发布时间】:2022-01-21 00:10:31
【问题描述】:

我已经解析了一个 HTML 文件并使用 Beautiful Soup 提取了文本,但是抓取的一些文本可能有不正确的引号(不同的字体或字符等),所以在我打印出来的 JSON 文件中,我看到了转义引号。我试图用空字符串替换它们,但由于它们与我从键盘键入的引号不兼容,我不认为它们在我的 replace() 函数中被识别为引号,这意味着替换函数是不工作。我还尝试通过在要替换的内容前面放一个小“r”来将替换声明为原始字符串,但这没有任何区别。如何删除转义引号?

代码:

'tag': div.text.split(',', 1)[0].replace('\n', '').replace('\u00a0', ' ').replace(r'\"', ''), # remove chars ',', ' \n', and '\u00a0',

JSON:

{
    "tag": "\"Data Scientists You May Know\" suggester",
    "definition": "",
    "source": [
        {
            "title": "Data Scientists You May Know",
            "URL": "https://learning.oreilly.com/library/view/data-science-from/9781492041122/ch01.html#RSdata01"
        },
        {
            "title": "Data Scientists You May Know",
            "URL": "https://learning.oreilly.com/library/view/data-science-from/9781492041122/ch01.html#idm45635773432952"
        }
    ]
},

如您所见,标签名称为"\"Data Scientists You May Know\" suggester",而应为"Data Scientists You May Know suggester"

【问题讨论】:

  • 你不想要r'\"' 字符串实际上不包含反斜杠,它只包含一个引号。由于外部引号,JSON 有一个反斜杠。你只想要.replace('"','')
  • 这些是“智能引号”,Unicode '\u201c''\u201d'
  • @TimRoberts 很遗憾,.replace('"', '') 没有删除任何内容。
  • @tromgy 很有趣。是否可以将它们更改为 unicode 然后在它们上调用 replace() 函数?
  • 只需使用replace('\u201c', '').replace('\u201d', '') 而不是replace(r'\"', '') 即可删除它们

标签: python beautifulsoup


【解决方案1】:

所以有问题的网站呈现如下:

那些花引号指向不同的打开和关闭方式,它们被称为“智能引号”,它们的 UTF-16 十六进制代码是 201C 和 201D。

所以要删除它们,您可以使用这些代码而不是 r'\"'

.replace('\u201c', '').replace('\u201d', '') 

但是这样的问题一般如何解决呢?

您可以直接从站点复制文本并将其保存在具有 UTF-16 编码的文本文件中。然后查看文件的二进制内容,例如在 linux/macOS 上使用 hexdump 命令,找到字符代码并将它们转换为 Python 字符串,例如 '\u<4-character hex unicode sequence>'

【讨论】:

  • 一种更简单的方法可能是将渲染的 HTML 中的有趣字符 复制 到您的代码编辑器中:.replace('“', '').replace('”', ''))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-01
  • 2011-05-12
  • 1970-01-01
  • 2017-04-18
  • 1970-01-01
  • 2015-07-07
  • 2018-05-13
相关资源
最近更新 更多