应根据需求选择提取方式:源码用正则或beautifulsoup,渲染后dom用开发者工具复制outerhtml,注意区分场景并处理嵌套、编码等问题。

直接保存整个网页的 <p></p> 标签内容,不能靠“另存为网页全部”——它会把所有资源打包,但不提取或过滤标签。你需要的是「提取 + 保存」两步动作,且必须区分「原始源码中的 <p></p>」和「渲染后 DOM 中的 <p></p>」。
用浏览器开发者工具复制当前渲染出的所有 <p></p> 标签
适用于页面经 JS 动态插入段落(比如新闻页、博客正文加载后才出现的 <p></p>):
- 按
F12打开开发者工具 → 切换到Elements面板 - 按
Ctrl+F(Windows)或Cmd+F(Mac),输入<p> 定位第一个 <code><p></p>节点 - 在 DOM 树中按住
Shift多选连续的<p></p>节点,右键 →Copy→Copy outerHTML - 粘贴进 VS Code 或记事本,手动补上
...结构再保存为paragraphs.html - ⚠️ 注意:如果段落嵌套在
<div class="content"> 里,只复制 <code><p></p>会丢失样式;此时应复制父容器的outerHTML,再用编辑器删掉非<p></p>内容用正则表达式从 HTML 字符串中精准提取
<p></p>标签块适合你已拿到一整段 HTML 字符串(比如 API 返回值、爬虫抓取结果),只想保留成对的
<p></p><div class="aritcle_card flexRow artxards"> <div class="artcardd flexRow"> <a class="aritcle_card_img" rel="nofollow" href="/xiazai/skill8272" title="anything-to-html"><img src="https://img.php.cn/upload/skill/000/000/081/179195588450431.jpg" alt="anything-to-html" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a> <div class="aritcle_card_info flexColumn"> <a rel="nofollow" href="/xiazai/skill8272" title="anything-to-html" class="overflowclass">anything-to-html</a> <p class="overflowclass">将调研报告、方案对比、数据分析、需求梳理、会议纪要、设计说明、代码评审、学习笔记等任务产物输出为可在浏览器直接打开的单文件 HTML,替代 Markdown 作为最终交付物。Markdown 在信息密度、视觉清晰度和可分享性上已跟不上 AI 产物的丰富度,HTML 能同时承载排版、表格、SVG 等。</p> </div> <a rel="nofollow" href="/xiazai/skill8272" title="anything-to-html" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a> </div> </div>及其内容:- JavaScript 中可用:
text.match(/<p>]*>[\s\S]*?/gi)</p>—— 支持带属性(如<p class="intro"></p>)和跨行文本 - Python 中推荐用
re.findall(r'<p>]*>.*?</p>', html_str, re.DOTALL | re.IGNORECASE) - ❌ 不要用
/<p>.*?/g</p>这种简单写法:遇到<p><em>hello</em></p>会因<em></em>中的提前截断 - ✅ 更健壮的匹配逻辑是:开头
<p> + 任意非 <code>>属性字符 +>+ 中间允许任意字符(含换行)+ 结尾
用 BeautifulSoup 稳定提取并结构化保存
<p></p>文本当 HTML 结构混乱、有嵌套、缺闭合标签,或你需要进一步清洗(去空格、合并相邻段落、过滤广告段落),
BeautifulSoup是更可靠的选择:- 安装:
pip install beautifulsoup4 - 基础提取:
from bs4 import BeautifulSoup html = "<p>第一段</p><div><p>第二段</p></div>" soup = BeautifulSoup(html, "html.parser") ps = soup.find_all("p") for p in ps: print(p.get_text(strip=True)) # 输出纯文本,自动清理空白- 保存为独立文件时,建议用
str(p)保留原始 HTML,或用p.get_text()存纯文本;避免直接拼接字符串,防止编码错乱 - ⚠️ 常见坑:没指定解析器(如
"html.parser"或"lxml")会导致某些嵌套<p></p>被忽略或错位闭合
真正难的不是“怎么拿到
<p></p>”,而是判断该用哪一层提取逻辑:源码里的?渲染后的?带样式的?还是只要文字?多数人卡在第一步没想清这个,后面就全偏了。 - JavaScript 中可用:










