2013-05-01 32 views
12

Ben bir web sitesi ayrıştırmak ve BeautifulSoup.findAll ile biraz bilgi almaya çalışıyorum ama hepsini bulamaz .. ben python3Güzel Çorbası findAll kodu

kullanıyorum tüm bunları bulamazsa sadece bunların yarısı basar bu

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

... kırık HTML ile farklı

cevap

45

Farklı bir HTML ayrıştırıcıları bir anlaşma. O sayfa kırık HTML hizmet vermektedir ve lxml ayrıştırıcı onunla çok iyi ilgileniyor değildir:

>>> 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 bu özel sayfayla daha az sorun yaşar standart kütüphane:

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

özel koduna olduğunu çevirme urllib kullanarak örnek, böylece ayrıştırıcı belirtmek istiyoruz:

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

teşekkür! işe yaradı! :) – Clepto

+0

Vay. Bu beni kafamı masaya vurmaktan kurtardı. Lxml ayrıştırıcısının sorun yaşadığını nasıl anladınız (sadece 18 satır döndürdüğü aşikardı). yani, bunun yanlış bir şekilde yanlış satır sayısına sahip olmasından başka bir sorun olduğunu nereden bilmeliydim? – FuriousGeorge

+7

Deneyim; Çoğunlukla buradaki insanlara yardım ederek. –