2013-05-01 11 views
12

私はウェブサイトを解析し、BeautifulSoup.findAllといくつかの情報を取得しようとしているが、それはそれらすべてを見つけることができません..私はのpython3美しいスープのfindAllは、コードが

を使用しているすべてのそれらを見つけることができませんでしたこの

#!/usr/bin/python3 

from bs4 import BeautifulSoup 
from urllib.request import urlopen 

page = urlopen ("http://mangafox.me/directory/") 
# print (page.read()) 
soup = BeautifulSoup (page.read()) 

manga_img = soup.findAll ('a', {'class' : 'manga_img'}, limit=None) 

for manga in manga_img: 
    print (manga['href']) 

それだけ

答えて

45

異なるHTMLパーサは壊れたHTMLとは異なる対処する...それらの半分を出力します。このページには、壊れたHTMLを提供し、lxmlパーサはそれを非常にうまく対処されていません。

>>> import requests 
>>> from bs4 import BeautifulSoup 
>>> r = requests.get('http://mangafox.me/directory/') 
>>> soup = BeautifulSoup(r.text, 'lxml') 
>>> len(soup.findAll('a', {'class' : 'manga_img'})) 
18 

標準ライブラリhtml.parserは、この特定のページで以下のトラブルがあります

>>> soup = BeautifulSoup(r.text, 'html.parser') 
>>> len(soup.findAll('a', {'class' : 'manga_img'})) 
44 

あなたの特定のコードにそれを翻訳しますサンプルでurllibを使用すると、パーサーを指定します。

soup = BeautifulSoup(page.read(), 'html.parser') 
+0

ありがとう!それはうまくいった! :) – Clepto

+0

うわー。それは私の頭をテーブルにもっと叩くのを救った。 lxmlパーサーが問題を抱えていたことは、どうやって分かったのですか?つまり、これを知らなければならないのは、間違った行数を静かに持つ以外の問題だったのでしょうか? – FuriousGeorge

+7

エクスペリエンス;主にSOを支援しています。 –

関連する問題