使用python beautiful soup和requests包时,HTML内容不正确

时间:2014-05-23 17:07:56

标签: python beautifulsoup

使用JSoup和BeautifulSoup解析网页后得到的HTML内容有所不同,如下所示。有没有人有同样的问题,你能告诉我怎么做才能解决这个问题吗?

检查每个区块的第三行 -

======= JSoup

<div class="col-full">
 <p><strong>Index Notifications</strong></p>
 <p></p><br>
<p> <br /> <b> March 28, 2014</b>
<br >
<br >

======= BeautifulSoup

<div class="col-full">
<p><strong>Index Notifications</strong></p>
<p><p> <br>
<b> March 28, 2014</b>
<br>
<br>

1 个答案:

答案 0 :(得分:2)

在解析损坏的HTML时,不同的解析器会尝试以不同方式修复损坏的标签;如何处理此类错误没有严格的规则。

BeautifulSoup可以make use of different parsers,每个人都会以不同的方式处理您的内容:

>>> import requests
>>> from bs4 import BeautifulSoup
>>> url = 'http://www.wisdomtree.com/etfs/index-notices.aspx'
>>> html = requests.get(url).content
>>> BeautifulSoup(html, 'html.parser').find('div', class_='col-full')
<div class="col-full">
<p><strong>Index Notifications</strong></p>
<p><p> <br>
<b> March 28, 2014</b>
<br> <br>
# ... cut ...
>>> BeautifulSoup(html, 'lxml').find('div', class_='col-full')
<div class="col-full">
<p><strong>Index Notifications</strong></p>
<p></p><p> <br/>
<b> March 28, 2014</b>
<br/> <br/>
# ... cut ...
>>> BeautifulSoup(html, 'html5lib').find('div', class_='col-full')
<div class="col-full">

            <p><strong>Index Notifications</strong></p>
            <p></p><p> <br/>
<b> March 28, 2014</b>
<br/>  <br/>
# ... cut ...

html5lib解析器是最慢的,但通常会解析破坏的HTML,就像大多数浏览器一样。 lxmlhtml5lib都解析了文档的这个特定部分,就像JSoup一样。