在BeautifulSoup4中,如果您在Tag元素上调用.string
,则应返回标签内包含的文本。
但是,如果标签内有注释,则.string
属性会突然返回None
。
尽管.text
属性似乎仍然有效,但是使用据称仍在工作的find
属性调用text
不再起作用。
因此,如果没有评论,find
有效,如果没有评论,find
不起作用。
这是MWE:
from bs4 import BeautifulSoup
def test(html):
soup = BeautifulSoup(html, 'lxml')
tag = soup.find('span')
print("TEXT {}: {}".format(type(tag.text), tag.text))
print("STRING {}: {}".format(type(tag.string), tag.string))
found = soup.find('span', text="Hello")
print("Found: {}\n".format("Yes" if found != None else "No"))
test('<span>Hello</span>')
test('<span><!-- AA -->Hello</span>')
以下是输出:
TEXT <class 'str'>: Hello
STRING <class 'bs4.element.NavigableString'>: Hello
Found: Yes
TEXT <class 'str'>: Hello
STRING <class 'NoneType'>: None
Found: No
问题是:为什么会显示此行为,如何恢复find
功能?
P.S。 find_all()
不会为任何孩子返回任何孩子
答案 0 :(得分:0)
如果标记只有一个window.onload = test_function();
类型的子代,则只有outside = [inside, inside, inside, inside, inside, inside, inside, inside, inside, inside]
将起作用。参见https://www.crummy.com/software/BeautifulSoup/bs4/doc/#string。
您的问题与BeautifulSoup - search by text inside a tag相同。对于您的问题,解决方案很少。