我正在尝试使用BeautifulSoup解析一些HTML,并且我想在标记中获取所有文本(递归),但我想忽略small
标记内显示的所有文本。例如,这个HTML:
<li>
<a href="/path">
Final
</a>
definition.
<small>
Fun fact.
</small>
</li>
应该给出文本Final definition.
请注意,这是一个最小的例子。在真实的HTML中,还涉及许多其他标记,因此应排除small
而不是a
。
标记的text
属性接近我想要的内容,但它包含Fun fact.
我可以连接除small
标记之外的所有子项的文本,但这会留下out definition.
我找不到像get_text_until
这样的方法(small
标记总是在最后),所以我该怎么办?
答案 0 :(得分:1)
您可以使用您不想递归到子标记的递归方法状态来获取此信息: 喜欢
soup.li.find(text=True, recursive=False)
所以你可以这样做
' '.join(li.find(text=True, recursive=False) for li in soup.findAll('li', 'a'))
答案 1 :(得分:1)
您可以使用find_all
查找所有<small>
代码,清除它们,然后使用get_text()
:
>>> soup
<li>
<a href="/path">
Final
</a>
definition.
<small>
Fun fact.
</small>
</li>
>>> for el in soup.find_all("small"):
... el.clear()
...
>>> soup
<li>
<a href="/path">
Final
</a>
definition.
<small></small>
</li>
>>> soup.get_text()
'\n\n\n Final\n \n definition.\n \n\n'