应优先提取的content属性,缺失时用文本截断至155字符作fallback,跳过keywords标签,spa页面需用浏览器渲染后获取。

直接从 <meta name="description"> 提取最可靠
绝大多数正规网站会在 中显式声明描述,形式为 <meta name="description" content="...">。这是唯一被搜索引擎(Google、Bing、百度)实际用于展示搜索结果摘要的字段,也是解析时应优先匹配的目标。
用 BeautifulSoup 提取时,别用模糊的 find('meta') 全扫,容易误命中其他 meta 标签。应明确限定属性:
soup.find('meta', attrs={'name': 'description'})- 拿到元素后,用
.get('content', '')安全取值,避免KeyError - 若返回
None,说明该页面根本没写这个标签,不是你代码错了
当 description 缺失时,<title></title> 是最现实的 fallback
很多静态页面或 CMS 生成页只写了 <title></title>,没配 description。这时候强行从正文抽摘要既慢又不准——你得先清洗 HTML、去广告、判段落权重,成本远超收益。
更务实的做法是退一级,把 <title></title> 文本当作描述用(截断到 155 字符以内,适配 SERP 显示长度):
使用 PptxGenJS 和 Python 解析,将结构化的 HTML/CSS 幻灯片内容转换为原生、可编辑的 PowerPoint(.pptx)演示文稿。
-
soup.find('title')→.get_text().strip() - 注意:有些
<title></title>含分隔符如|或-,可按需切分取前半段 - 不要试图用正则从
<title></title>里“提取关键词”,这属于过度假设
别碰 keywords 标签,它对解析毫无价值
<meta name="keywords" content="..."> 自 2009 年起已被 Google 官方弃用,百度和 Bing 也早已不将其纳入排名或摘要依据。当前仍存在该标签的页面,多为老旧模板或 SEO 插件自动生成,内容常为空、堆砌、重复或与正文无关。
在解析逻辑中显式跳过它:
- 完全不写针对
keywords的提取分支 - 如果已有通用 meta 扫描逻辑,加个
if meta.get('name') == 'keywords': continue - 它的存在本身不构成信息,只增加 DOM 遍历开销
动态渲染页必须先执行 JS,否则 description 可能为空
单页应用(SPA)或 Next.js/Nuxt 等框架生成的页面,<meta name="description"> 常由 JavaScript 在客户端注入。用 requests + BeautifulSoup 直接抓源码,拿到的是未渲染的空壳 HTML,content 字段自然为空字符串。
此时必须切换解析方式:
- 改用
Puppeteer(Node.js)或Selenium(Python)启动真实浏览器上下文 - 等待
document.querySelector('meta[name="description"]')出现并取content属性 - 注意:这会显著拖慢解析速度,且需维护浏览器驱动;仅对已知为 SPA 的域名启用
description 看似简单,真正难的是判断「此刻该信哪一段 HTML」:是服务端吐出的原始 meta?还是 JS 注入后的最终状态?有没有 fallback 容错?这些决策点比具体代码行数重要得多。前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










