2013-05-01 145 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']) 

只打印其中的一半......

回答

45

不同的破碎的HTML解析器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 2013-05-01 20:55:36

+0

哇。这让我不再把我的头撞在桌子上。你怎么知道lxml解析器有问题(除了显而易见的是它只返回18行)。即我应该怎么知道这是一个问题,而不是默默地有错误的行数? – FuriousGeorge 2014-03-16 17:58:32

+7

经验;主要是通过帮助这里的人们。 – 2014-03-16 18:22:07