2013-05-01 3 views
12

나는 웹 사이트를 분석하고 BeautifulSoup.findAll 일부 정보를 얻으려고하지만 그들 모두를 찾을 수 없습니다 .. 내가 python3아름다운 수프 findall은 코드가

를 사용하고 모든 그들을 찾을 수 없습니다 그것은 단지 그들의 절반을 인쇄이

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

... 깨진 HTML과 다르게

답변

45

다른 HTML 파서 거래. 해당 페이지는 깨진 HTML을 제공하고, lxml 파서는 아주 잘 처리되지 않습니다

>>> 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이 특정 페이지 덜 문제가 표준 라이브러리 :

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

특정 코드에 그 번역을 샘플 urllib을 사용하면 다음과 같이 파서를 지정합니다.

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

감사합니다! 그게 효과가! :) – Clepto

+0

와우. 그 덕분에 저의 머리를 탁자 위에 두드려서 구해 냈습니다. lxml 파서에 문제가 있다는 것을 어떻게 알았습니까 (18 행만 리턴하는 것이 명백한 것 외에는). 즉,이 행이 잘못된 수를 자동으로 가지는 것 이외의 다른 문제라는 것을 어떻게 알았습니까? – FuriousGeorge

+7

체험; 주로 여기에서 사람들을 돕는 것을 통해. –

관련 문제