我正在使用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”
可能有什么不对?谢谢!
答案 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')