2013-05-01 15 views
12

Próbuję analizować stronę internetową i uzyskać pewne informacje z BeautifulSoup.findAll ale nie znaleźć je wszystkie .. Używam python3Piękne Soup findAll ich nie znaleźć wszystko

kod jest to

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

to tylko drukuje połowę z nich ...

Odpowiedz

45

Different parser HTML sprawa inaczej ze złamanym HTML. Że strona służy złamaną HTML i lxml parser nie ma do czynienia bardzo dobrze z nim:

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

biblioteki standardowej html.parser ma mniej kłopotów z tej konkretnej stronie:

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

Translating że do konkretnego kodu próbka przy użyciu urllib, należy określić parser w ten sposób:

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

dziękuję! to się udało! :) – Clepto

+0

Wow. To mnie uratowało przed uderzeniem głową o stół. Skąd wiesz, że parser LXML miał problemy (inne niż oczywiste, że zwrócił tylko 18 wierszy). tj. jak powinienem wiedzieć, że to był problem inny niż to, że w milczeniu ma on niewłaściwą liczbę wierszy? – FuriousGeorge

+7

Doświadczenie; głównie poprzez pomaganie ludziom tutaj na SO. –

Powiązane problemy