web-dev-qa-db-ja.com

Beautiful Soup findAllですべてが見つからない

私はウェブサイトを解析し、BeautifulSoup.findAllでいくつかの情報を取得しようとしていますが、それらをすべて見つけられません..私はpython3を使用しています

コードはこれです

#!/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'])

それらの半分だけを印刷します...

26
Clepto

異なるHTMLパーサーは、壊れたHTMLを異なる方法で処理します。そのページは壊れたHTMLを提供し、lxmlパーサーはそれをうまく処理していません:

>>> import requests
>>> from bs4 import BeautifulSoup
>>> r = requests.get('http://mangafox.me/directory/')
>>> soup = BeautifulSoup(r.content, 'lxml')
>>> len(soup.find_all('a', class_='manga_img'))
18

標準ライブラリ html.parser この特定のページでのトラブルが少なくなります:

>>> soup = BeautifulSoup(r.content, 'html.parser')
>>> len(soup.find_all('a', class_='manga_img'))
44

urllibを使用して特定のコードサンプルに変換すると、次のようにパーサーを指定できます。

soup = BeautifulSoup(page, 'html.parser')  # BeatifulSoup can do the reading
60
Martijn Pieters