我真的不明白BeautifulSoup是如何运作的。我试过这个:
from bs4 import BeautifulSoup
def strip_del(soup):
for d in soup.find_all('del'):
d.decompose()
def num_there(s):
return any(i.isdigit() for i in s)
def is_airfield(tr):
return not num_there(tr.td.span.text)
soup = BeautifulSoup(html, 'lxml')
strip_del(soup)
for tr in soup.table.tbody:
if is_airfield(tr):
print('yes')
else:
print('no')
但是当我跑步时,我有一个错误,告诉我我无法从NaviagableString
函数中的is_airfield
访问 td 。
所以我的问题是为什么这不起作用以及如何工作BeautifulSoup?!
感谢您的帮助!
答案 0 :(得分:1)
问题是您要返回NavigableString
而不是tag
。我将改为使用find_all
方法,看看它是如何工作的。
for tr in soup.find_all("tr"):
if is_airfield(tr):
print('yes')
else:
print('no')
答案 1 :(得分:0)
你正在做的事情不起作用的原因是你的汤里面有两种物品,标签和NavigableString(可能会有更多,但我不知道那些会是什么)。正如您可能从文档中收集到的所有BeautifulSoup的汤的导航方法都可用于标记。它们不适用于NavigableStrings,它们通常也会混合在汤中。
当您搜索汤时,应确保只调用标记上可用于标记的方法,以及仅适用于NavigableStrings的方法。这可以通过使用if条件或try除块来实现。您可以通过import NavigableString
测试汤中的对象是否为NavigableString,然后使用if语句中的isinstance(obj, NavigableString)
方法来区分NavigableStrings和常规标记。