isinstance与beautifulsoup无法正常工作(NameError)

时间:2014-02-17 02:34:06

标签: python beautifulsoup nameerror isinstance

我正在使用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”

可能有什么不对?谢谢!

1 个答案:

答案 0 :(得分:0)

查找具有span parent和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')