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个元素符合这个条件。所以有任何限制,如最大元素大小的比例。我怎样才能得到所有的元素?
最简单的方法可能是使用'html。解析器'代替'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>
s, <
和/
等字母在他们不允许的位置。