BeautifulSoup / lxml:大元素有问题吗?

时间:2013-04-16 05:31:16

标签: python python-2.7 beautifulsoup lxml activepython

import os, re, sys, urllib2
from bs4 import BeautifulSoup
import lxml

html = urllib2.urlopen("http://www.hoerzu.de/tv-programm/jetzt/")
soup = BeautifulSoup(html, "lxml")
divs = soup.find_all("div", {"class":"block"})
print len(divs)

输出:

ActivePython 2.7.2.5 (ActiveState Software Inc.) based on
Python 2.7.2 (default, Jun 24 2011, 12:21:10) [MSC v.1500 32 bit (Intel)] on win
32
Type "help", "copyright", "credits" or "license" for more information.
>>> import os, re, sys, urllib2
>>> from bs4 import BeautifulSoup
>>> import lxml
>>>
>>> html = urllib2.urlopen("http://www.hoerzu.de/tv-programm/jetzt/")
>>> soup = BeautifulSoup(html, "lxml")
>>> divs = soup.find_all("div", {"class":"block"})
>>> print len(divs)
2

我也尝试过:

divs = soup.find_all(class_="block")

同样的结果......

但是有11种元素适合这种情况。那么有任何限制,如最大元素大小resp。我怎样才能获得所有元素?

1 个答案:

答案 0 :(得分:4)

最简单的方法可能是使用'html.parser'代替'lxml':

import os, re, sys, urllib2
from bs4 import BeautifulSoup
import lxml

html = urllib2.urlopen("http://www.hoerzu.de/tv-programm/jetzt/")
soup = BeautifulSoup(html, "html.parser")
divs = soup.find_all("div", {"class":"block"})
print len(divs)

使用原始代码(使用lxml),它为我打印1,但会打印11。对于此页面,lxml是宽松的,但不像html.parser那样宽松。

请注意,如果您通过tidy运行该页面,则该页面会超过一千个警告。在不允许的位置包含无效的字符代码,未关闭的<div></等字母。