使用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>
答案 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,就像大多数浏览器一样。 lxml
和html5lib
都解析了文档的这个特定部分,就像JSoup一样。