1

isinstance を使用していくつかの html タグを選択し、それらを Beautifulsoup 関数に渡しています。問題は、完全に実行可能なコードから NameErrors を取得し続けることです。

def horse_search(tag):
    return (tag.has_attr('href') and isinstance(tag.previous_element, span))

...

for tag in soup.find_all(horse_search):
   print (tag)    

NameError: グローバル名 'span' が定義されていません

また、 isinstance を tag.previous_element と組み合わせて使用​​する Beautifulsoup のドキュメントのサンプルコードからエラーが発生しています

def surrounded_by_strings(tag):
    return (isinstance(tag.next_element, NavigableString)
            and isinstance(tag.previous_element, NavigableString))

for tag in soup.find_all(surrounded_by_strings):
    print tag.name

NameError: グローバル名 "NavigableString" が定義されていません

何が間違っている可能性がありますか?ありがとう!

4

1 に答える 1

0

span の親と href 属性を持つすべてのアンカーを見つけるには、次のようにします。

for span in soup.find_all('span'):
    for a in span.find_all('a'):
        if a.has_attr('href'):
            print a['href']

ただし、これは良いことですが、ほとんどの場合、xpath をサポートするツールを使用するとさらに効果的です。たとえば、lxml と xpath を使用すると、コードは次のようにきれいに表示されます。

from lxml import etree
etree.parse(url, etree.HTMLParser()).xpath('//span/a/@href')
于 2014-02-17T06:01:47.863 に答える