web-dev-qa-db-fra.com

Beautiful Soup findAll ne les trouve pas tous

J'essaie d'analyser un site Web et d'obtenir des informations avec BeautifulSoup.findAll mais il ne les trouve pas tous .. J'utilise python3

le code est-ce

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

il n'en imprime que la moitié ...

26
Clepto

Différents analyseurs HTML traitent différemment le HTML cassé. Cette page sert du HTML cassé, et l'analyseur lxml ne le gère pas très bien:

>>> 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

La bibliothèque standard html.parser a moins de problèmes avec cette page spécifique:

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

En traduisant cela dans votre exemple de code spécifique en utilisant urllib, vous spécifieriez l'analyseur ainsi:

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