使用beatifulsoup解析数据时如何将html实体保存到csv文件中

时间:2018-07-13 18:12:18

标签: python beautifulsoup

找不到任何将HTML实体保存到CSV文件的解决方案,例如脚本提取此类数据

<li>Key Switch: Blue switch&nbsp;</li>

csv文件中的输出将如下所示

<li>Key Switch: Blue switch </li>

有什么方法可以保存在页面上显示的HTML实体?

1 个答案:

答案 0 :(得分:1)

您实际上不需要保存HTML实体。实际上,只有五个HTML实体在HTML中至关重要:&lt;&gt;&amp;和次要的&quot;&apos;。所有其他仅仅是便利设施,不是必需品。

当手动编写HTML时,它们可以派上用场,以输入键盘上没有键的字符,或者区分在源代码中看起来与原始字符相同的字符,例如常规空格和不间断空格(&nbsp;)。

但是-如果您到处都使用正确的字符编码,则完全有可能用它们代表的实际字符替换这些实体。

这正是您在这里遇到的问题。这就是发生的事情:

  • 您下载了HTML文件,服务器正确指定了编码。
  • 您使用BeautifulSoup对其进行了解析。在此过程中,&nbsp;被转换为非空格字符。这是解析的正常部分,每个HTML解析器都会这样做。
  • 您处理了DOM树并将其部分保存到CSV文件。您为该文件选择了UTF-8编码。不间断空格由UTF-8中的两个字节0xC20xA0表示。
  • 您再次加载了CSV文件,可能是在代码的另一部分,或者是在另一个应用程序中(完全是Excel?),但没有指定它是UTF-8(多字节编码)。
  • 因此,应用程序使用系统上配置的任何“默认编码”来解释文件中的字节-我怀疑使用了Windows-1252(单字节编码)。
  • 在Windows-1252中,两个字节0xC20xA0代表两个字符:Â和具有讽刺意味的是,不间断空格。换句话说,到目前为止一切都是正确的,这是以错误的方式读取破坏了数据。

从最有利到最不利的方式来解决这个问题:

  • 告诉应用程序或代码段,其加载的编码为UTF-8的CSV文件。
  • 将utf-8 BOM(字节顺序标记)添加到CSV文件。特别是Excel可能需要此命令才能正常运行。
    Python将这种编码称为utf-8-sig,您可以在打开CSV文件进行写入时使用它。
  • 将CSV文件保存为系统默认的“传统”编码而不是UTF-8,这有可能无法保存该编码不支持的任何字符。