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

Python 为什么美丽的汤会改变html?,python,html,beautifulsoup,Python,Html,Beautifulsoup,我有一个HTML文件。我正试着打开它,读它的内容 打开(“M_ALARM_102.HTML”,“r”)作为f: contents=f.read() 印刷品(目录) 当我在上面的命令中打印内容时,它可以完美地打印。但当我将内容传递给BeautifulSoup并打印汤时,它会更改HTML代码 soup=BeautifulSoup(内容,html.parser) 印花(汤) 这是BeautifulSoup的输出 ÿþ<html> <head&gt

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

打开(“M_ALARM_102.HTML”,“r”)作为f:
contents=f.read()
印刷品(目录)
当我在上面的命令中打印内容时,它可以完美地打印。但当我将内容传递给BeautifulSoup并打印汤时,它会更改HTML代码

soup=BeautifulSoup(内容,html.parser)
印花(汤)
这是BeautifulSoup的输出

ÿþ<html>

<head>

<meta charset="UTF-8">

<title>ARRÊT SERVOS</title>

<style type="text/css">
我不明白它为什么这样做。我需要从中提取3个标记,但它一直将
None
作为输出


有人能帮我吗?

<是this symbol。İt用于通过XSS(跨站点脚本)攻击保护网站的安全。

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

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

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

您还可以通过在python中以utf-16的形式打开文件来修复它,使用
并将open(“M\u ALARM\u 102.HTML”,“r”,encoding=“utf-16”)作为f:
。注意,这里您可以直接指定编码(请参阅)


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

好的。但是当我打印
soup.h1
时,它返回空。我如何解决这个问题?因为当开发者使用<和>时< h1>不是HTML标记,它只是一个文本。谢谢@rob,这两个解决方案都有效。当我在记事本中打开文件时,我认为奇怪的字符是一个问题,没有任何奇怪的字符,尽管我将其保存为向导,并且它像魔术一样工作。