Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用beatifulsoup解析数据时如何将html实体保存到csv文件中_Python_Beautifulsoup - Fatal编程技术网

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

Python 使用beatifulsoup解析数据时如何将html实体保存到csv文件中,python,beautifulsoup,Python,Beautifulsoup,找不到任何将HTML实体保存到CSV文件的解决方案,例如提取此类数据的脚本 <li>Key Switch: Blue switch&nbsp;</li> 钥匙开关:蓝色开关 csv文件中的输出如下所示 <li>Key Switch: Blue switch </li> 钥匙开关:蓝色开关 有没有办法保存页面上显示的HTML实体?您实际上不需要保存HTML实体。在HTML中,只有五个HTML实体实际上是至关重要的:,,&和不太

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

<li>Key Switch: Blue switch&nbsp;</li>
  • 钥匙开关:蓝色开关
  • csv文件中的输出如下所示

    <li>Key Switch: Blue switch </li>
    
  • 钥匙开关:蓝色开关

  • 有没有办法保存页面上显示的HTML实体?

    您实际上不需要保存HTML实体。在HTML中,只有五个HTML实体实际上是至关重要的:
    &
    和不太重要的
    &apos;
    。所有其他的都只是一种便利设施,而不是必需品

    在手工编写HTML时,它们可以方便地输入键盘上没有键的字符,或者区分在源代码中看起来相同的字符,如常规空格和非中断空格(

    但是,考虑到您在任何地方都使用了正确的字符编码,用它们所代表的实际字符替换这些实体是完全可能的

    这正是你的问题所在。事情就是这样:

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

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