如何使用BeautifulSoup的find_all方法匹配id前缀为指定值的div标签
解决方案
BeautifulSoup 支持两种常用方式实现属性值的前缀匹配:
方法1:正则表达式匹配
导入re模块,用正则开头匹配符^指定前缀即可:
import re from bs4 import BeautifulSoup # 筛选id以uni-item开头的div items = soup.find_all('div', id=re.compile(r'^uni-item'))
正则规则里的^表示仅匹配字符串开头,避免匹配到包含该前缀但不是开头的属性值。
方法2:自定义过滤函数
如果不想引入正则模块,也可以用自定义函数判断前缀:
# 筛选id以uni-item开头的div,x为id属性值,先判断id存在再匹配前缀 items = soup.find_all('div', id=lambda x: x and x.startswith('uni-item'))
完整测试示例
from bs4 import BeautifulSoup import re html = ''' <div class="" style="" id="uni-item-229925"></div> <div class="" style="" id="uni-item-223625"></div> <div class="" style="" id="uni-item-229325"></div> <div class="" style="" id="other-item-123456"></div> ''' soup = BeautifulSoup(html, 'html.parser') items = soup.find_all('div', id=re.compile(r'^uni-item')) for item in items: print(item['id'])
运行后输出:
uni-item-229925 uni-item-223625 uni-item-229325
内容的提问来源于stack exchange,提问作者user13450807
相关产品推荐
相关产品推荐

