我有以下HTML代码:
<a class="nav-link" href="https://cbd420.ch/fr/tous-les-produits/">
<span class="cbp-tab-title">
Shop <i class="fa fa-angle-down cbp-submenu-aindicator"></i></span>
</a>
我希望得到锚定标记,它将Shop
作为文本,而不考虑前后的间距。我尝试了以下代码,但始终得到一个空数组:
import re
html = """<a class="nav-link" href="https://cbd420.ch/fr/tous-les-produits/">
<span class="cbp-tab-title">
Shop <i class="fa fa-angle-down cbp-submenu-aindicator"></i></span>
</a>"""
soup = BeautifulSoup(html, 'html.parser')
prog = re.compile('\s*Shop\s*')
print(soup.find_all("a", string=prog))
# Output: []
我还尝试使用get_text()
检索文本:
text = soup.find_all("a")[0].get_text()
print(repr(text))
# Output: '\n\n\t\t\t\t\t\t\t\tShop \n'
并运行以下代码以确保我的正则表达式是正确的,这似乎是正确的
result = prog.match(text)
print(repr(result.group()))
# Output: '\n\n\t\t\t\t\t\t\t\tShop \n'
我还尝试选择span
而不是a
,但我遇到了同样的问题。我猜这是与find_all
有关,我已经阅读了BeautifulSoup documentation,但我仍然找不到问题。任何帮助都将不胜感激。谢谢
这里的问题是,您要查找的文本位于包含子标记的标记中,并且当标记包含子标记时,
string
属性为空您可以在
.find
调用中使用lambda表达式,因为您正在查找固定字符串,所以可以仅使用'Shop' in t.text
条件而不是正则表达式检查:您正在搜索的文本
Shop
位于span
标记内,因此当您尝试使用正则表达式时,它无法使用正则表达式获取值您可以尝试使用正则表达式来查找文本,然后查找该文本的父级
如果您有BS4.7.1或更高版本,您可以使用以下css选择器
相关问题 更多 >
编程相关推荐