2017-02-01 10 views
3

私はPythonでBeautifulsoupを使用してこれを解析していますwebpagePython BeautifulSoup - 無効なHTMLを解析中にfind_nextを使用

私の目標は、「AUTRE競技」の見出しの後にテーブルを取得することです:私はページを取得するために管理し

page = BeautifulSoup(requests.get(website_link,proxies=proxy).text,'html.parser') 
page.find("h3",text=u'Autres comp\xe9titions').find_next("table") 

を、しかし、問題は、私は検索で得た結果であるの最初のセルだけですテーブルのヘッダ:

<table class="gradient" id="tosort"> 
<tr> 
<th class="gradient">Type</th></tr></table> 

私は、問題がUnicodeにあるページから来ていることを考えた:

page = BeautifulSoup(requests.get(path,proxies=proxy).text,'html.parser') 
page.find("h3",text=u'Autres comp\xe9titions'.encode('utf-8')).find_next("table") 

しかし私は同じ結果を得る。

ありがとうございました。

答えて

1

パーサーをhtml.parserからlxmlまたはhtml5libに変更します。

いずれかのパーサーがインストールされていない場合は、here is the relevant Beautiful soup documentation on how to install different parsersです。

BeautifulSoup(requests.get(website_link,proxies=proxy).text, 'lxml') 

スクラップしようとしているページのHTMLソースコードが無効です。

ローカルでこれをテストしましたが、lxmlhtml5libパーサーははるかに寛容であり、無効なHTMLにもかかわらずtable要素を適切に選択することができました。ドキュメントによると、html.parserは、Pythonのバージョンによってはそれほど寛大ではありません。

は具体的には、html.parserのための問題を引き起こしていた無効なHTMLがth要素に浮遊divタグあった。その結果

<th class='gradient'>Type</div></td> 

html.parserは浮遊過ぎて解析することができませんでしたdivタグを使用したため、要素全体を選択できませんでした。

+1

'html.parser'が壊れているので、私はbs4ドキュメントがそれを削除するか、警告情報を追加する必要があると思います –

0

このように、デフォルトのパーサーを使用します。

>>> import requests 
>>> from bs4 import BeautifulSoup 
>>> URL = 'http://dansesportive.ffdanse.fr/compet-resultats.php?NumManif=1592' 
>>> soup = BeautifulSoup(requests.get(URL).content,'lxml') 
>>> heading = soup.find_all(string='Autres compétitions') 
>>> heading 
['Autres compétitions'] 

>>> heading[0].findNext('table') 
<table class="gradient" id="tosort"> 
<tr> 
<th class="gradient">Type 
    </th><th class="gradient">Niveau 
    </th><th class="gradient">Classe 
    </th><th class="gradient">Série 
    </th><td> </td> 
<th class="gradient">Lat. 
    </th><th class="gradient">St. 
    </th><th class="gradient">10 d. 
</th></tr> 
<tr> 
<td class="">Championnat</td> 
<td class="">Régional</td> 
<td class="">Adultes </td> 
<td class="">A B C D E F </td> 
<td> </td> 
<td class=" left center"><a href="compet-resultats.php?NumManif=1592&amp;Compet=Champ-R-A-ABCDEF-L">x</a></td><td class=" left center"> </td><td class=" left center"> </td> 
</tr> 
<tr> 
<td class="orangelight">Championnat</td> 
<td class="orangelight">Régional</td> 
<td class="orangelight">Adultes </td> 
<td class="orangelight">A B C D E F </td> 
<td> </td> 
<td class="orangelight left center"> </td><td class="orangelight left center"><a href="compet-resultats.php?NumManif=1592&amp;Compet=Champ-R-A-ABCDEF-S">x</a></td><td class="orangelight left center"> </td> 
</tr> 
<tr> 
<td class="">Championnat</td> 
<td class="">Régional</td> 
<td class="">Juniors II </td> 
<td class="">C D E F </td> 
<td> </td> 
<td class=" left center"><a href="compet-resultats.php?NumManif=1592&amp;Compet=Champ-R-C-CDEF-L">x</a></td><td class=" left center"> </td><td class=" left center"> </td> 
</tr> 
<tr> 
<td class="orangelight">Championnat</td> 
<td class="orangelight">Régional</td> 
<td class="orangelight">Youths </td> 
<td class="orangelight">B C D E F </td> 
<td> </td> 
<td class="orangelight left center"><a href="compet-resultats.php?NumManif=1592&amp;Compet=Champ-R-J-BCDEF-L">x</a></td><td class="orangelight left center"> </td><td class="orangelight left center"> </td> 
</tr> 
<tr> 
<td class="">Championnat</td> 
<td class="">Régional</td> 
<td class="">Youths </td> 
<td class="">B C D E F </td> 
<td> </td> 
<td class=" left center"> </td><td class=" left center"><a href="compet-resultats.php?NumManif=1592&amp;Compet=Champ-R-J-BCDEF-S">x</a></td><td class=" left center"> </td> 
</tr> 
<tr> 
<td class="orangelight">Championnat</td> 
<td class="orangelight">Régional</td> 
<td class="orangelight">Séniors I </td> 
<td class="orangelight">A B C D E F </td> 
<td> </td> 
<td class="orangelight left center"> </td><td class="orangelight left center"><a href="compet-resultats.php?NumManif=1592&amp;Compet=Champ-R-S-ABCDEF-S">x</a></td><td class="orangelight left center"> </td> 
</tr> 
<tr> 
<td class="">Championnat</td> 
<td class="">Régional</td> 
<td class="">Séniors II </td> 
<td class="">A B C D E F </td> 
<td> </td> 
<td class=" left center"><a href="compet-resultats.php?NumManif=1592&amp;Compet=Champ-R-V-ABCDEF-L">x</a></td><td class=" left center"> </td><td class=" left center"> </td> 
</tr> 
<tr> 
<td class="orangelight">Championnat</td> 
<td class="orangelight">Régional</td> 
<td class="orangelight">Séniors II </td> 
<td class="orangelight">A B C D E F </td> 
<td> </td> 
<td class="orangelight left center"> </td><td class="orangelight left center"><a href="compet-resultats.php?NumManif=1592&amp;Compet=Champ-R-V-ABCDEF-S">x</a></td><td class="orangelight left center"> </td> 
</tr> 
<tr> 
<td class="">Championnat</td> 
<td class="">Régional</td> 
<td class="">Séniors III </td> 
<td class="">A B C D E F </td> 
<td> </td> 
<td class=" left center"><a href="compet-resultats.php?NumManif=1592&amp;Compet=Champ-R-W-ABCDEF-L">x</a></td><td class=" left center"> </td><td class=" left center"> </td> 
</tr> 
<tr> 
<td class="orangelight">Championnat</td> 
<td class="orangelight">Régional</td> 
<td class="orangelight">Séniors IV </td> 
<td class="orangelight">A B C D E F </td> 
<td> </td> 
<td class="orangelight left center"> </td><td class="orangelight left center"><a href="compet-resultats.php?NumManif=1592&amp;Compet=Champ-R-X-ABCDEF-S">x</a></td><td class="orangelight left center"> </td> 
</tr> 
</table> 
関連する問題