如何用Python提取网页抓取结果中特定子串间的目标字符串?
Python 网页抓取目标内容提取方案
核心思路
利用正则表达式匹配固定格式的目标元素,直接提取<p>数字.内容</p>中的核心内容,这种方式比split或切片更稳定,能适配重复数百次的模式。
代码实现
基础版本
import re # 模拟抓取到的原始数据列表 raw_data = [ '<p>xxx<p>', '<p>1.apple</p>', '<p>aaa</p>', '<p>xxxxx</p>', '<p>xxxxx</p>', '<p>2.orange</p>', '<p>aaa</p>', '<p>xxxxx</p>', '<p>3.banana</p>', '<p>aaa</p>', '<p>xxxxx</p>' ] # 定义正则规则:匹配<p>数字.内容</p>的结构,捕获中间的目标内容 match_pattern = re.compile(r'<p>\d+\.(.*)</p>') # 遍历提取目标内容 target_content = [] for item in raw_data: match_result = match_pattern.search(item) if match_result: target_content.append(match_result.group(1)) # 输出期望的有序列表格式 for idx, content in enumerate(target_content, start=1): print(f"<li><p>{content}</p></li>")
简化版本(列表推导式)
import re raw_data = [ '<p>xxx<p>', '<p>1.apple</p>', '<p>aaa</p>', '<p>xxxxx</p>', '<p>xxxxx</p>', '<p>2.orange</p>', '<p>aaa</p>', '<p>xxxxx</p>', '<p>3.banana</p>', '<p>aaa</p>', '<p>xxxxx</p>' ] match_pattern = re.compile(r'<p>\d+\.(.*)</p>') target_content = [match.group(1) for item in raw_data if (match := match_pattern.search(item))] # 生成目标格式输出 for idx, content in enumerate(target_content, start=1): print(f"{idx}. <p>{content}</p>")
正则规则说明
<p>\d+:匹配开头的<p>标签和一个或多个数字\.:匹配点号(正则中点号是特殊字符,需转义)(.*):捕获任意长度的目标内容(即我们需要的apple、orange等)</p>:匹配结尾的</p>标签
内容的提问来源于stack exchange,提问作者poon cl
相关产品推荐
相关产品推荐

