我在下面写了一行:
[x['href'] for x in BeautifulSoup(data, parseOnlyThese=SoupStrainer('a'))]
数据是urllib.urlopen(XXX).read()
在python2.7中实现的。
当 XXX 是由全部英文字符组成的页面时,它可以很好地工作,例如http://python.org。但是当它去一个页面有一些汉字时,它就失败了。会有一个KeyError。并[x for ...]
返回一个空列表。
更重要的是,如果没有parseOnlyThese=SoupStrainer('a')
,两者都可以。
SoupStrainer 有什么错误吗?
from BeautifulSoup import BeautifulSoup, SoupStrainer
import urllib
data = urllib.urlopen('http://tudou.com').read()
[x['href'] for x in BeautifulSoup(data, parseOnlyThese=SoupStrainer('a'))]
给出回溯:
Traceback (most recent call last):
File "<pyshell#3>", line 1, in <module>
[x['href'] for x in BeautifulSoup(data, parseOnlyThese=SoupStrainer('a'))]
File "F:\ActivePython27\lib\site-packages\beautifulsoup-3.2.1-py2.7.egg\BeautifulSoup.py", line 613, in __getitem__
return self._getAttrMap()[key]
KeyError: 'href'