0

我在下面写了一行:

[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' 
4

1 回答 1

1

<a>该页面上有没有属性href的链接。请改用以下内容:

[x['href'] for x in BeautifulSoup(data, parseOnlyThese=SoupStrainer('a')) if x.has_key('href')]

例如,用<a name="something" />;声明链接目标是完全正常的。您也在选择这些标签,但它们没有href属性,并且您的代码在该属性上失败。

于 2012-12-05T14:43:38.933 回答