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

时间:2016-02-14 04:34:00

标签: python

这可能是一个重复的问题,但无法通过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(&#39; dd&#39;)并解析dd.contents,错过了值&lt; = 500和Text3 ..

1 个答案:

答案 0 :(得分:0)

回答我自己的问题,但有没有更简单的方法直接使用BeautifulSoup处理它?<​​/ p>

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