BeautifulSoup正则匹配动态class名获取a标签内容失效问题
问题产生原因
- 正则匹配规则逻辑写反:目标a标签的class值结构为「动态变化前缀 + 固定后缀
lTitleonContext」,你写的正则^TitleonContext.*要求class值以TitleonContext开头,和实际属性值结构完全不符,无法命中元素。 - 正则匹配的目标片段有误:实际class的固定后缀是
lTitleonContext,你写的匹配片段漏了开头的l,就算调整匹配顺序也无法命中。 - 输出逻辑有问题:就算成功匹配到元素,直接
print(title)输出的是整个a标签的HTML源码,不是你需要的标签内部文本内容。
修正方案
写法1:修正正则匹配规则
import re # 正则调整为匹配以固定片段lTitleonContext结尾的class属性 titles = soup.find_all("a", attrs={"class": re.compile(r'lTitleonContext$')}) for title in titles: # 调用get_text提取标签内文本,strip()清除前后多余的空格、换行 print(title.get_text(strip=True))
写法2:无需正则的lambda匹配(更简洁)
利用BeautifulSoup的属性筛选能力,直接判断class属性是否包含固定片段,不需要导入re模块:
titles = soup.find_all("a", class_=lambda class_val: class_val and "lTitleonContext" in class_val) for title in titles: print(title.get_text(strip=True))
运行上述代码即可正常输出Title 0、Title 1、Title 2这类目标文本。
内容的提问来源于stack exchange,提问作者Kome Gognome
相关产品推荐
相关产品推荐

