【发布时间】:2018-08-24 15:49:51
【问题描述】:
我正在尝试阅读和编辑一个 html 文件。我正在使用 BeautifulSoup 来编辑 html,但我发现即使在制作“汤”之前,我的 html 文件已经被 read() 函数解释了。 例如:
<html>
<head>
<meta http-equiv=Content-Type content="text/html; charset=us-ascii">
<meta name=Generator content="Microsoft Word 12 (filtered)">
</head>
<a href="Aug_24_2018.txt"><b>Aug 24 2018: Report</a></br>
<a href="Aug_23_2018.txt"><b>Aug 23 2018: Report</a></br>
<a href="Aug_22_2018.txt"><b>Aug 22 2018: Report</a></br>
<a href="Aug_21_2018.txt"><b>Aug 21 2018: Report</a></br>
<a href="Aug_20_2018.txt"><b>Aug 20 2018: Report</a></br>
</html>
变成这样:
<html>
<head>
<meta http-equiv=Content-Type content="text/html; charset=us-ascii">
<meta name=Generator content="Microsoft Word 12 (filtered)">
</head>
<a href="Aug_24_2018.txt"><b>Aug 24 2018: Report</a>
<a href="Aug_23_2018.txt"><b>Aug 23 2018: Report</a>
<a href="Aug_22_2018.txt"><b>Aug 22 2018: Report</a>
<a href="Aug_21_2018.txt"><b>Aug 21 2018: Report</a>
<a href="Aug_20_2018.txt"><b>Aug 20 2018: Report</a>
</html>
这是非常不同的,因为它破坏了格式并将所有域混合在一起。
这是我用来阅读的代码:
with open("/data/report.html") as inf:
txt = inf.read() #this is where the problem occurs
soup = bs4.BeautifulSoup(txt, 'lxml')
我不能随意更改原始文件的格式,所以我想尽可能地符合它。保留</br> 标签的任何可能解决方案?
【问题讨论】:
-
使用 'html.parser' 或 'html5lib' 而不是 'lxml'
-
也是
,自闭,不是结束标签。 -
我重新生成了测试用例,
</br>只有在使用lxml解析器解析后才会消失。 -
</br>可能是你的问题。它使您的 HTML 无效,并且如果没有解析器的各种 hacky 猜测,就无法解析。lxml解析器显然只是将它们扔掉,这是合理的。不同的解析器可能会引发异常,或者将其变成对您真正意思的猜测,或者尝试以与 Netscape 4.0.1 完全相同的方式处理它,或其他任何方式。你不能抱怨这些选项中的任何一个都是“错误的”。您的 HTML 不是有效的 HTML,因此如果您希望将其解析为 HTML,它要么会更改,要么无法解析。 -
@LMP 我愿意打赌
read不会 摆脱它,无论你在做什么来调试它,你只是检查了一下它在错误的地方。 See your code running on repl.it:</br>在read之后还在,但是解析后就不在了。
标签: python html python-3.x beautifulsoup