2016-04-11 19 views
2

私はBeautifulsoup(bs4)を使用してHTMLページをスクラップしています。それはリスト<ul>を持っていて、興味深いリンク(href)を保持する<li>を持っています。BeautifulSoup(bs4):不正な形式のHTMLでエンディングタグを無視する方法

スニペット

<ul> 
<!-- C 1-3 --></p> 
<li> 
    <a href="http://LINK1" target="_blank">Link1 description</a> 
</li> 
</ul> 

<ul> 
<!-- E 1-2-3-6 --></p> 
<li> 
    <a href="LINK-2" target="_blank">Link-2 description</a> 
</li> 
<p><!-- E 4-5 -7-8-9-10-11 --></p> 
</ul> 

問題:私は抽出するためにfind_all()を使用すると、すべての<ul> - 私はオープニング<p>が欠落している不正な結末</p>ためにそれを取得しておりません。ブラウザはこれを無視してOKをレンダリングしますが、BS4は解析を駄目です。 BS4の不正な形式のタグを無視しようとする人はいましたか?

entries = soup.find_all(lambda x: x.name == 'ul') 
print(len(entries)) 
print(entries[0]) 

1 
<ul> 
<!-- C 1-3 --></ul> 

答えて

5

私はHTMLのためのより寛大なパーサーを試してみるべきだと思います。例:

soup = BeautifulSoup(pg, "html5lib") 

html5libパーサーは、最も寛大なパーサーです。利点は以下のとおりです。

  • は、Webブラウザが
  • 同じ方法が有効なHTML5

短所がある作成したページ解析して非常に寛大:

  • 非常に遅いが外部Python依存性

ドキュメントは異なるパーサの長所と短所のいくつかの説明を提供しています:https://beautiful-soup-4.readthedocs.org/en/latest/#installing-a-parser

+0

FWIWは、あなたがた場合に何らかの理由でリンクを変更し、関連するテキストを引用すべきです。 :-) – n1c9

関連する問題