当前位置: 首页 > 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.rkmt.cn/news/1484891.html

相关文章:

  • 深圳公明眼镜店哪个好
  • 这款免费AI工具,让你轻松成为编程大师
  • Hadoop 3.x 数据安全实战:手把手教你配置HDFS透明加密与KMS(附避坑指南)
  • 2026年石家庄空调移机公司推荐 大为搬家16年专业经验值得信赖 - 本地品牌推荐
  • 从PCIe 5.0到SR-IOV:一张图看懂现代数据中心网卡的硬件虚拟化原理
  • 你的Docker容器初始化慢?可能是没搞懂/docker-entrypoint-initdb.d目录的正确用法
  • 2026 安徽马鞍山市|本地人必选旧房改造・墙面刷新・局部装修 3 家正规企业精选 + 避坑攻略 - 本地便民网
  • 高频数据下载和分析笔记,逐笔tick和分钟行情拆分记录分享
  • 打卡信奥刷题(3369)用C++实现信奥题 P9691 [GDCPC 2023] Base Station Construction
  • C51单片机驱动TM1628控制多位数码管的完整工程包(含Keil可编译源码与调试文件)
  • 手搓Claude Code-第二章 tool_use
  • 应用安全 --- IDA FLIRT 原理
  • 多维聚合后的数据变形术:从SQL GROUP BY到可编程数据立方体
  • 别再死磕公式了!用Cartographer建图时,概率栅格更新的‘查表法’到底快在哪?
  • 告别玄学调参:手把手教你用MATLAB/Simulink搭建PMSM的EKF观测器(附模型下载)
  • AI编码加速后,如何突破CI/CD与代码审查瓶颈
  • OpenMV IDE不只是调试工具:手把手教你用它批量生成Apriltag全家族图片
  • 笔记本频繁黑屏(nvlddmkm Event 14)NVIDIA nvlddmkm ID: 14 ID: 153 问题分析与解决
  • 元知识库构建方案
  • 2026年城市供水管网信息化改造全流程:从勘测设计到系统上线
  • 哪家南昌全屋定制品牌专业?2026年6月推荐TOP5评测对比适用场景特点 - 品牌推荐
  • 计算机内存中的栈和堆
  • 【钢铁雄心4】超简单低延迟保姆级联机教程,一分钟学会钢铁雄心局域网联机!!
  • Scikit-image图像处理实战:从蒙娜丽莎解构到医学级滤波
  • 手把手教你用HTML+CSS复刻一个简约风个人主页(附完整源码和素材)
  • VS Code + AWS SSM零配置远程开发实战
  • VSCode + Ollama + Continue 本地 AI 代码助手 实操手册
  • 别再混淆了!用PyTorch的ConvTranspose2d手把手搞懂反卷积(附代码验证)
  • 国内优质的静音发电机企业口碑推荐,附近发电机/高压发电机租赁/应急发电机/本地发电机出租,静音发电机品牌哪家强 - 品牌推荐师
  • Matlab大气湍流相位屏生成工具:Zernike建模+波前仿真+斯特雷尔比评估