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')両方OKです。

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 に答える