提问者:小点点

为什么美丽的汤会改变html?


我有一个HTML文件。我试着打开它,读里面的内容

with open("M_ALARM_102.HTML", "r") as f:
    contents = f.read()
    print(contents)

当我打印上述命令中的内容时,它可以完美地打印。但是,当我将内容传递给美丽汤并打印汤时,它会更改HTML代码

    soup = BeautifulSoup(contents, html.parser)
    print(soup)

这是BeautifulSoup的输出

ÿþ<html>

<head>

<meta charset="UTF-8">

<title>ARRÊT SERVOS</title>

<style type="text/css">

我不明白为什么它这样做。我需要从中提取3个标签,但它一直给出作为输出。

有人能帮帮我吗?


共2个答案

匿名用户

匿名用户

可能是BeautifulSoup使用的解析器没有将该文件识别为html。

我在该输出中看到两个“奇怪”的字符:ÿþ。它们看起来像是将 BOM(字节顺序标记)添加到文件中的东西,而解析器需要有效的 utf-8。很
有可能这就是问题所在。

解决 BOM 表问题的一种方法是在记事本中打开该文件,并将其另存为 UTF-8。记事本非常擅长做这种事情。

您也可以通过使用< code >和open("M_ALARM_102)在python中以utf-16格式打开文件来修复它。HTML "," r ",encoding="utf-16 ")作为f:。请注意,这里您直接指定了编码(参见python文档中关于unicode的更多内容)。

请注意,我没有亲自尝试后一种方法,所以我不确定它是否真的会删除BOM——最好的选择仍然是在您的工作流程中根本不引入它。

相关问题