使用 Python BS4 处理 Web 抓取 html 中的 HTML 字符



这可能是一个重复的问题,但无法通过stackoverflow找到任何答案。

从网络上抓取了一些html文件,但它们在文本中包含特殊字符,如">","<",BeautifulSoup无法处理它并抛出BeautifulSoup.find不稳定。在使用 BeautifulSoup 解析 html 之前,有没有办法转义文本?

编辑:认为这足够通用,但添加带有问题的 html:

<HTML>
<HEAD><TITLE>Title</TITLE>
</HEAD><BODY>
<p>
<h2>Heading 2</h2>
<hr align=left width=75%>
<dl><h3>Heading 3</h3>
<p>
<dd><a href="./ref.pl?R1"><b>R1</b></a>
<i><b>PP</b></i>:
<a href="./refs.pl?R2">R2</a>
<dl>
<dd>
 Text1 <a href="./refs.pl?T1">T1</a>
; Text2 <a href="./refs.pl?T1">T1</a>
<i>value<=500</i> <a href="./refs.pl?+T2">T2</a>
; Text3 <a href="./refs.pl?T3">T3</a>
</dl>
Sat Feb  14 23:36:59 EST 2016
<p></body></html>

尝试收集所有文本值,调用 dd = soup.find('dd'( 并解析 dd.content 会错过值<=500 和 Text3。

回答我自己的问题,但是有没有更简单的方法可以直接用 BeautifulSoup 处理它?

from tidylib import tidy_document
doc, errors = tidy_document(htmlfile.read())
soup = BeautifulSoup(doc, "lxml")

现在 HTML 文档已<i>value&lt;=500</i>,这有助于BeautifulSoup.find避免行为不规律。

调用dd = soup.find('dd')和分析dd.contents现在提供value<=500Text3

最新更新