如何用BeautifulSoup提取<li>标签指定类名并生成数组
解决方案
你的现有代码仅获取了第一个<li>标签,要提取所有<li>里以bar开头的类名并生成目标格式数组,按以下方式修改代码:
修改后的完整代码
from bs4 import BeautifulSoup soup = BeautifulSoup(response.text, 'html.parser') # 获取页面中所有<li>标签 all_li_tags = soup.find_all('li') # 初始化结果数组 scraped = [] # 遍历每个<li>标签 for li in all_li_tags: # 遍历当前<li>的所有类名,筛选bar开头的项 for class_name in li.get('class', []): if class_name.startswith('bar'): scraped.append(class_name) break # 每个<li>仅含一个bar开头类名,找到后直接跳出内层循环 print(scraped)
关键改动说明
- 获取所有
<li>标签:用soup.find_all('li')替代soup.li,后者仅返回第一个匹配的<li>,前者会返回页面中所有<li>元素的列表。 - 安全获取类列表:使用
li.get('class', [])而非直接li['class'],避免遇到无class属性的<li>时抛出异常。 - 精准筛选目标类名:通过
startswith('bar')判断类名是否符合要求,确保只提取你需要的类。 - 优化遍历效率:每个目标
<li>仅包含一个bar开头的类名,找到后用break跳出内层循环,减少不必要的遍历。
执行代码后,会输出你需要的格式:
["bar188457","bar188053","bar187776","bar187777","bar187380"]
内容的提问来源于stack exchange,提问作者Jashmine
相关产品推荐
相关产品推荐

