这可能是一个重复的问题,但无法通过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<=500</i>
,这有助于BeautifulSoup.find
避免行为不规律。
调用dd = soup.find('dd')
和分析dd.contents
现在提供value<=500
和Text3
。