【问题标题】:isinstance not working correctly with beautifulsoup(NameError)isinstance 无法与 beautifulsoup 一起正常工作(NameError)
【发布时间】:2014-02-17 02:34:06
【问题描述】:

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

可能出了什么问题?谢谢!

【问题讨论】:

标签: python beautifulsoup nameerror isinstance


【解决方案1】:

要查找所有具有 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')

【讨论】:

  • 遗憾的是,这并不能回答问题(“可能出了什么问题” - 即,为什么会在这里抛出 NameErrors)。
猜你喜欢
  • 2016-11-27
  • 1970-01-01
  • 1970-01-01
  • 2017-12-14
  • 2020-08-19
  • 2013-02-06
  • 2019-02-02
  • 2021-10-15
  • 2016-07-05
相关资源
最近更新 更多