如何使用BeautifulSoup定位无属性列表并获取其所有子元素
BeautifulSoup文本定位嵌套列表解决方案
修正后可运行代码
import requests from bs4 import BeautifulSoup url = 'https://www.marketresearch.com/Infiniti-Research-Limited-v2680/Global-DNA-Microarray-30162580/' page = requests.get(url) soup = BeautifulSoup(page.text, 'html.parser') toc = soup.find("div", id="toc") # 定位包含目标文本的li父标签 market_drivers_tag = toc.find(lambda t: t.name == 'li' and 'Market drivers' in t.get_text(strip=True)) if market_drivers_tag: # 取该标签下第一个ul的所有直接子li,不限数量 driver_list = [item.get_text(strip=True) for item in market_drivers_tag.find('ul').find_all('li', recursive=False)] print(driver_list) else: print('未找到Market drivers模块')
对应问题处理逻辑
- 无属性文本定位:通过lambda自定义匹配规则,直接筛选标签名和文本内容,无需依赖class、id等属性,是BeautifulSoup针对无属性标签定位的标准实现方式。
- 不限数量取直接子节点:
find_all('li', recursive=False)是BS4官方推荐的获取直接子元素的写法,会自动返回所有符合条件的直接子节点,数量不受限制,无需使用已废弃的findChildren方法。 - 限定查找范围:定位到Market drivers对应的li标签后,所有查找操作都在该标签内部执行,天然不会匹配到后续Market challenges等其他模块的内容,无需额外设置find_all_next的终止条件。
内容的提问来源于stack exchange,提问作者Michael Wiz
相关产品推荐
相关产品推荐

