2013-05-01 13 views
12

Ich versuche, eine Website zu analysieren und einige Informationen mit BeautifulSoup.findAll zu bekommen, aber es hat sie alle nicht finden .. Ich verwende python3Schöne Suppe findAll findet sie nicht alle

der Code diese

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

druckt er nur die Hälfte von ihnen ...

Antwort

45

Verschiedene HTML-Parser viel anders mit gebrochenen HTML. Die Seite dient gebrochen HTML und der lxml Parser ist nicht sehr gut mit ihm zu tun:

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

der Standardbibliothek html.parser weniger Probleme mit dieser speziellen Seite hat:

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

dass Ihren spezifischen Code übersetzen Probe mit urllib, würden Sie den Parser so angeben:

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

danke! das hat funktioniert! :) – Clepto

+0

Wow. Das hat mich davor bewahrt, meinen Kopf mehr auf den Tisch zu schlagen. Woher wussten Sie, dass der LXML-Parser Probleme hatte (außer dem offensichtlichen, dass er nur 18 Zeilen zurückgab). Wie hätte ich wissen sollen, dass dies ein Problem war, abgesehen davon, dass es still die falsche Anzahl an Zeilen hatte? – FuriousGeorge

+7

Erfahrung; hauptsächlich dadurch, dass man den Menschen hier auf SO hilft. –