当前位置: 首页 > news >正文

网页正文抽取接口接入实践:基于文本密度的新闻博客内容解析方案

网页正文抽取接口接入实践:基于文本密度的新闻博客内容解析方案

在内容采集、资讯聚合、舆情分析、知识库构建和搜索索引系统中,网页正文抽取是一个非常常见但容易踩坑的环节。

普通网页 HTML 往往包含大量非正文内容,例如顶部导航、侧边栏、推荐位、广告、评论区、版权声明和脚本代码。如果直接保存整页 HTML,不仅会污染索引和摘要结果,还会影响后续的分词、向量化、去重和内容分析。

本文基于页面资料,对网页主体正文抽取接口的能力边界、接入方式、字段确认、结果处理、异常边界和上线检查进行整理。页面资料明确说明该接口支持从新闻、博客、公众号等网页抽取主体正文,并自动去除导航、侧栏、广告和评论,基于文本密度算法,同时返回标题、发布时间、配图列表、字数与预估阅读时长。

接口地址:

https://v1.apizero.cn/api/content-extract

一、接口适用场景

该接口适合用于以下业务场景:

  • 新闻正文抽取
  • 博客文章解析
  • 公众号网页内容采集
  • 资讯聚合系统
  • 搜索引擎索引构建
  • 舆情监控内容清洗
  • AI 知识库入库前预处理
  • 网页摘要生成前的数据清洗
  • 内容去噪与正文结构化

核心目标是从复杂网页中提取“真正有价值的主体正文”,并过滤页面噪声。


二、页面资料可确认的能力边界

根据页面资料,可以确认该接口具备以下能力:

能力说明
主体正文抽取从网页中提取主要正文内容
导航去除自动过滤网页导航区域
侧栏去除自动过滤侧边栏内容
广告去除自动过滤广告相关内容
评论去除自动过滤评论区内容
新闻网页支持可用于新闻网页正文抽取
博客网页支持可用于博客文章正文抽取
公众号网页支持可用于公众号网页正文抽取
文本密度算法基于文本密度算法进行正文识别
标题返回返回文章标题
发布时间返回返回文章发布时间
配图列表返回返回正文相关配图列表
字数统计返回文章字数
阅读时长估算返回预估阅读时长

三、页面资料未提供的信息

页面资料没有明确提供以下接口细节:

信息项状态
请求方法页面资料未提供
请求参数名称页面资料未提供
URL 参数字段页面资料未提供
是否支持 HTML 直接传入页面资料未提供
返回 JSON 字段名页面资料未提供
鉴权方式页面资料未提供
错误码页面资料未提供
请求超时时间页面资料未提供
网页大小限制页面资料未提供
是否支持批量抽取页面资料未提供
是否支持登录态页面页面资料未提供
是否支持 JavaScript 渲染页面页面资料未提供

因此,代码示例只能作为工程模板,不能直接视为最终请求格式。


四、接入前需要确认的输入数据

正文抽取接口通常需要知道目标网页地址,但页面资料没有明确给出真实参数名。

接入前应确认以下事项:

待确认项说明
目标网页 URL 字段名页面资料未提供
是否只支持 URL 抽取页面资料未提供
是否支持传入 HTML页面资料未提供
是否需要指定编码页面资料未提供
是否需要指定来源类型页面资料未提供
是否支持公众号链接页面资料说明支持公众号网页,但未说明限制条件
是否需要 User-Agent 配置页面资料未提供
是否支持重定向链接页面资料未提供

五、推荐的数据处理流程

在工程项目中,建议将正文抽取流程拆成以下几个步骤:

输入网页地址 ↓ 参数校验 ↓ 请求正文抽取接口 ↓ 解析标题、正文、发布时间、配图、字数、阅读时长 ↓ 内容清洗与字段标准化 ↓ 入库或进入后续 NLP/搜索/摘要流程

这样可以将“接口调用”和“业务处理”分开,便于后续替换接口或扩展字段。


六、数据库结构设计建议

如果需要保存抽取结果,可以设计如下表结构。

CREATETABLEcontent_extract_record(idBIGINTPRIMARYKEYAUTO_INCREMENT,source_urlTEXT,titleVARCHAR(500),publish_timeVARCHAR(100),contentLONGTEXT,images JSON,word_countINT,reading_timeVARCHAR(100),raw_response JSON,created_atDATETIME,updated_atDATETIME);

字段说明:

字段作用
source_url原始网页地址
title抽取出的标题
publish_time发布时间
content主体正文
images配图列表
word_count字数
reading_time预估阅读时长
raw_response原始接口响应

建议保留raw_response,方便接口字段升级后重新解析。


七、请求示例模板

页面资料只提供接口地址,没有提供请求方法和参数名。以下示例仅作为模板,需要按实际文档补齐。

1. cURL 请求模板

curl-XPOST"https://v1.apizero.cn/api/content-extract"\-H"Content-Type: application/json"\-H"Authorization: Bearer {API_KEY}"\-d'{ "url": "{需要抽取正文的网页地址}" }'

需要确认:

  • 实际请求方法是否为 POST
  • 参数名是否为url
  • 是否需要鉴权
  • 鉴权字段格式
  • 是否支持传入 HTML
  • 是否支持批量 URL

2. JavaScript 调用模板

asyncfunctionextractContent(pageUrl){constresponse=awaitfetch("https://v1.apizero.cn/api/content-extract",{method:"POST",headers:{"Content-Type":"application/json","Authorization":"Bearer {API_KEY}"},body:JSON.stringify({url:pageUrl})});if(!response.ok){thrownewError(`正文抽取接口请求失败,HTTP状态码:${response.status}`);}returnawaitresponse.json();}

注意:url只是模板字段名,页面资料未提供真实参数名,实际接入前需要确认。


3. Node.js 服务端封装模板

classContentExtractService{constructor(options){this.endpoint=options.endpoint;this.apiKey=options.apiKey;}asyncextract(pageUrl){this.validateUrl(pageUrl);constresponse=awaitfetch(this.endpoint,{method:"POST",headers:{"Content-Type":"application/json","Authorization":`Bearer${this.apiKey}`},body:JSON.stringify({url:pageUrl})});constresult=awaitresponse.json();if(!response.ok){thrownewError(`网页正文抽取失败:${response.status}`);}returnresult;}validateUrl(pageUrl){try{constparsedUrl=newURL(pageUrl);if(!["http:","https:"].includes(parsedUrl.protocol)){thrownewError("仅支持 HTTP 或 HTTPS 地址");}}catch{thrownewError("网页地址格式不正确");}}}constservice=newContentExtractService({endpoint:"https://v1.apizero.cn/api/content-extract",apiKey:process.env.CONTENT_EXTRACT_API_KEY});

这段代码用于说明服务端封装思路,实际字段名和鉴权方式需以接口文档为准。


八、结果字段适配建议

页面资料明确说明接口会返回以下信息:

  • 标题
  • 发布时间
  • 配图列表
  • 字数
  • 预估阅读时长

但页面资料没有提供真实字段名。因此建议在业务系统中建立适配层。

functionnormalizeExtractResult(apiResult){return{title:apiResult.title,publishTime:apiResult.publish_time,images:apiResult.images,wordCount:apiResult.word_count,readingTime:apiResult.reading_time,content:apiResult.content,raw:apiResult};}

上面字段名是常见命名模板,不代表接口真实返回字段。正式接入时应根据实际返回结构调整。


九、正文质量检查

正文抽取接口虽然可以自动去除导航、侧栏、广告和评论,但业务系统仍建议增加结果质量检查。

1. 正文为空

functioncheckContentResult(result){if(!result.content||result.content.trim().length===0){thrownewError("未抽取到有效正文");}}

2. 正文过短

functionisContentTooShort(content,minLength=100){return!content||content.trim().length<minLength;}

如果正文过短,可能是:

  • 页面需要登录
  • 页面依赖 JavaScript 渲染
  • 页面结构特殊
  • URL 无效
  • 目标站点禁止访问

页面资料未说明是否支持登录态页面或 JavaScript 渲染页面,因此需要通过测试确认。


3. 标题缺失

functiongetSafeTitle(result,fallbackUrl){if(result.title&&result.title.trim()){returnresult.title.trim();}returnfallbackUrl;}

标题缺失时,建议使用 URL 或业务侧自定义标题兜底。


十、图片列表处理建议

页面资料说明接口会返回配图列表。工程处理时建议关注:

  • 图片 URL 是否为绝对地址
  • 图片是否带防盗链限制
  • 图片是否需要代理下载
  • 图片是否与正文相关
  • 图片列表是否为空

示例处理模板:

functionnormalizeImages(images){if(!Array.isArray(images)){return[];}returnimages.filter(Boolean).map(String).filter(url=>url.startsWith("http://")||url.startsWith("https://"));}

十一、发布时间处理建议

页面资料说明接口会返回发布时间,但没有说明时间格式。

建议做统一标准化处理:

functionnormalizePublishTime(publishTime){if(!publishTime){return"";}returnString(publishTime).trim();}

如果业务需要按时间排序,建议在入库前将发布时间解析为标准时间字段;如果解析失败,则保留原始字符串。


十二、阅读时长与字数处理

页面资料说明接口会返回字数和预估阅读时长。

建议在前端展示时避免二次计算冲突:

functionbuildArticleMeta(result){return{wordCountText:result.word_count?`${result.word_count}`:"",readingTimeText:result.reading_time?String(result.reading_time):""};}

如果业务系统自己也计算阅读时长,需要明确优先级:

  • 优先使用接口返回值
  • 或统一使用业务系统算法
  • 不建议同一页面展示两个不同阅读时长

十三、异常处理边界

1. URL 不合法

functionassertValidUrl(url){try{newURL(url);}catch{thrownewError("URL格式不正确");}}

2. 接口超时

asyncfunctionrequestWithTimeout(url,options,timeout=10000){constcontroller=newAbortController();consttimer=setTimeout(()=>controller.abort(),timeout);try{returnawaitfetch(url,{...options,signal:controller.signal});}finally{clearTimeout(timer);}}

3. 结果字段缺失

functionvalidateExtractFields(result){constimportantFields=["title","content"];for(constfieldofimportantFields){if(!result[field]){console.warn(`正文抽取结果字段缺失:${field}`);}}}

字段名需要根据真实接口返回调整。


十四、安全与合规建议

正文抽取功能可能涉及外部网页内容采集,工程落地时建议注意:

  • 不要在前端暴露接口密钥
  • 服务端统一代理调用接口
  • 记录来源 URL,便于内容溯源
  • 对采集内容做版权与使用范围审核
  • 避免抓取登录后内容
  • 避免采集用户隐私页面
  • 对异常站点设置黑名单或访问限制
  • 对结果入库前进行敏感内容过滤

推荐链路:

前端提交 URL ↓ 业务服务端校验 URL ↓ 调用正文抽取接口 ↓ 结果清洗与字段适配 ↓ 入库、索引或摘要处理

不推荐:

前端直接携带密钥调用正文抽取接口

十五、上线前测试清单

页面类型测试

  • 新闻详情页
  • 博客文章页
  • 公众号文章页
  • 带侧栏网页
  • 带广告网页
  • 带评论网页
  • 图片较多的网页
  • 发布时间格式复杂的网页

异常输入测试

  • 空 URL
  • 非 HTTP 地址
  • 不存在的网页
  • 跳转链接
  • 访问超时页面
  • 需要登录的页面
  • JavaScript 渲染页面

结果验证

  • 标题是否准确
  • 正文是否完整
  • 是否去除导航
  • 是否去除侧栏
  • 是否去除广告
  • 是否去除评论
  • 配图列表是否可用
  • 字数是否合理
  • 阅读时长是否符合预期

十六、总结

网页正文抽取接口适合用于新闻、博客、公众号等内容页面的结构化解析。根据页面资料,该接口基于文本密度算法,可以自动去除导航、侧栏、广告和评论,并返回标题、发布时间、配图列表、字数和预估阅读时长。

由于页面资料未提供完整请求参数、返回字段名、鉴权方式和错误码,实际接入时应先确认接口文档,再通过适配层统一字段结构。生产环境中,建议重点做好 URL 校验、超时控制、正文质量检查、图片列表处理、发布时间标准化和内容合规审查,避免将噪声内容或异常页面直接写入数据库、搜索索引或知识库。

http://www.jsqmd.com/news/973171/

相关文章:

  • 保姆级教程:在Ubuntu 20.04上搞定STM32MP157双核开发环境(A7+M4,含SDK和CubeIDE避坑指南)
  • mysql之udf提权
  • OPRD:蒸馏不只学答案,还要偷看老师的“脑内活动“
  • mvc---- 前端校验
  • 计算机界的“高考“:软考高项是一场持久战
  • 从安装到实战:手把手教你用Nsight Systems (nsys) 优化一个向量加法CUDA程序
  • Unity游戏翻译神器:XUnity.AutoTranslator新手入门到精通
  • 深圳公明眼镜店哪个好
  • 2026年众智商学院400热线怎么核对?报名咨询和班期确认入口 - 众智商学院职业教育
  • Hadoop 3.x 数据安全实战:手把手教你配置HDFS透明加密与KMS(附避坑指南)
  • 哪家南昌全屋定制品牌靠谱?2026年6月推荐TOP5对比空间利用评测案例选择指南 - 品牌推荐
  • STC89C52等51单片机直连DHT22的可烧录工程合集(含DHT11/DHT21兼容代码)
  • 多维聚合实战:ROLAP下数据立方体的切片、钻取与动态计算
  • 2025-2026年北京管道疏通公司推荐:五大评测专业指南市政管网养护选择指南价格 - 品牌推荐
  • R语言实战:用lm()和手动计算两种方法搞定回归模型的MSE评估(附mtcars数据集案例)
  • 视频理解新范式:TimeSformer如何用‘分而治之’的注意力机制,在Something-Something数据集上超越CNN?
  • 这款免费AI工具,让你轻松成为编程大师
  • 从PCIe 5.0到SR-IOV:一张图看懂现代数据中心网卡的硬件虚拟化原理
  • 2026年石家庄空调移机公司推荐 大为搬家16年专业经验值得信赖 - 本地品牌推荐
  • 你的Docker容器初始化慢?可能是没搞懂/docker-entrypoint-initdb.d目录的正确用法
  • 中医粉常见八大逻辑误区 – 爱自然 爱科技
  • 千万不能错过!这家两联供产品厂家为何让同行都震惊了?
  • TensorFlow 2深度学习操作系统:从API调用到系统掌控
  • 2026 年五款免费 PDF 转换器无水印实测与选型指南
  • 给自动驾驶算法工程师的仿真利器:用MATLAB Simulink控制UE4虚拟环境完整流程
  • 从一次金额计算Bug说起:手把手教你用BigDecimal.compareTo()做安全的数值比较
  • 2026 安徽马鞍山市|本地人必选旧房改造・墙面刷新・局部装修 3 家正规企业精选 + 避坑攻略 - 本地便民网
  • 哪家北京房产纠纷律师靠谱?2026年6月推荐TOP5对比合同陷阱评测案例适用场景专业 - 品牌推荐
  • C51单片机驱动TM1628控制多位数码管的完整工程包(含Keil可编译源码与调试文件)
  • 打卡信奥刷题(3369)用C++实现信奥题 P9691 [GDCPC 2023] Base Station Construction