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。我怎样才能获得所有元素?
答案 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>
,<
和/
等字母。