我正在尝试在以下html代码中检索少量<p>
标记。这里只是它的一部分
<td class="eelantext">
<a class="fBlackLink"></a>
<center></center>
<span> … </span><br></br>
<table width="402" vspace="5" cellspacing="0" cellpadding="3"
border="0" bgcolor="#ffffff" align="Left">
<tbody> … </tbody></table>
<!--edstart-->
<p> … </p>
<p> … </p>
<p> … </p>
<p> … </p>
<p> … </p>
</td>
您可以找到网页here
我的Python代码如下
soup = BeautifulSoup(page)
div = soup.find('td', attrs={'class': 'eelantext'})
print div
text = div.find_all('p')
但是text变量是空的,如果我打印div变量,除了<p>
标签之外,我有完全相同的html。
答案 0 :(得分:12)
BeautifulSoup可以使用different parsers to handle HTML input。这里的HTML输入有点破碎,默认的HTMLParser
解析器不能很好地处理它。
改为使用html5lib
parser:
>>> len(BeautifulSoup(r.text, 'html').find('td', attrs={'class': 'eelantext'}).find_all('p'))
0
>>> len(BeautifulSoup(r.text, 'lxml').find('td', attrs={'class': 'eelantext'}).find_all('p'))
0
>>> len(BeautifulSoup(r.text, 'html5lib').find('td', attrs={'class': 'eelantext'}).find_all('p'))
22