【问题标题】:Why does beautiful-soup change the html?为什么beautiful-soup 会改变html?
【发布时间】:2020-11-14 23:30:53
【问题描述】:

我有一个 HTML 文件。我正在尝试打开它并将内容读取为

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

当我打印上述命令中的内容时,它会完美打印。但是当我将内容传递给 BeautifulSoup 并打印汤时,它会更改 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 个标签,但它一直给出 None 作为输出。

有人可以帮帮我吗?

【问题讨论】:

    标签: python html beautifulsoup


    【解决方案1】:

    &lt 是 这个符号。它是为了安全保护网站免受 XSS(跨站点脚本)攻击。

    【讨论】:

    • 好的。但是当我打印 soup.h1 它返回空。我该如何解决?
    • 因为当开发者使用 &lt 和 &gt 时 &lt h1 &gt 不是 HTML 标签,它只是一个文本。
    【解决方案2】:

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

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

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

    您也可以通过使用with open("M_ALARM_102.HTML", "r", encoding="utf-16") as f: 在python 中以utf-16 格式打开文件来修复它。请注意,您在此处直接指定编码(请参阅python documentation about unicode 中的更多内容)。

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

    【讨论】:

    • 感谢@rob,您的两个解决方案都有效。我认为奇怪的字符是一个问题,当我在记事本中打开文件时没有任何奇怪的字符,尽管我按照指导保存了它,它就像魔法一样工作。
    猜你喜欢
    • 2010-10-14
    • 1970-01-01
    • 2023-03-12
    • 2020-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-08
    相关资源
    最近更新 更多