如何用Python从HTML代码中提取特定位置的目标列表元素?
网页数据提取实现方案(Python)
优先推荐:用BeautifulSoup直接解析HTML(不转字符串/正则)
正则处理HTML容错性极差,一旦页面结构有细微变化(比如换行、属性顺序调整)就会失效,而BeautifulSoup本身就是为HTML解析设计的,完全不需要把soup转成字符串处理。结合你的需求(目标列表位于某特定行之后),具体步骤如下:
定位标识行(蓝色括号包裹的行)
这行的绿色文本是每个页面的唯一标识,你可以用正则匹配文本内容来定位对应的元素。代码示例:import requests import re from bs4 import BeautifulSoup # 现有请求代码不变 resp = requests.get("https://statusinvest.com.br/fundos-imobiliarios/knri11", headers={'User-Agent': 'Mozilla/5.0'}) soup = BeautifulSoup(resp.content, features="html.parser") # 定位包含绿色标识文本的元素(比如<h3>标签,根据实际页面结构调整) marker_element = soup.find('h3', text=re.compile(r'Ativos')) # 替换成你看到的绿色文本关键词提取后续的目标列表(粉色括号内的内容)
找到标识元素后,通过兄弟节点/父节点定位到目标列表,再提取所有列表项:if marker_element: # 找到标识元素的下一个容器(根据实际HTML结构调整,比如<div>) list_container = marker_element.find_next_sibling('div') # 定位粉色括号内的<ul>列表 target_ul = list_container.find('ul') # 提取所有列表项文本 result_items = [li.get_text(strip=True) for li in target_ul.find_all('li')] # 输出结果 for item in result_items: print(item)
备选:用正则提取(仅当结构完全固定时使用)
如果一定要用正则,需确保页面结构绝对稳定,步骤如下:
html_str = str(soup) # 编写正则模式:匹配标识行(蓝色括号),然后捕获后续的粉色括号列表 # 注意:需根据实际HTML标签、属性调整正则内容 pattern = re.compile(r'<div class="marker-class">.*?绿色关键词.*?</div>\s*(<ul.*?</ul>)', re.DOTALL) match_result = pattern.search(html_str) if match_result: # 提取到列表的HTML片段后,建议再用BeautifulSoup解析提取文本 list_soup = BeautifulSoup(match_result.group(1), 'html.parser') result_items = [li.get_text(strip=True) for li in list_soup.find_all('li')] print(result_items)
内容的提问来源于stack exchange,提问作者Felipe Luongo
相关产品推荐
相关产品推荐

