:公开网页文本抓取器如何做到可交付)
网页抓取类需求非常常见但真正能交付的脚本不能只在开发者电脑上偶尔成功一次。它至少要回答四个问题抓哪些页面、是否允许访问、失败后如何记录、客户怎么重复运行。我把这类需求整理成了一份公开可运行的最小样品源码与说明https://github.com/jhhjwei/codex-runner/tree/main/demos/public-web-text-scraper面向公开、无需登录的普通网页检查robots.txt默认只跟随同域链接可配置最大页数、访问间隔和超时时间输出 URL、标题、正文、状态和错误到 CSV/JSON一、先限制范围再开始抓取很多抓取脚本的问题不是解析失败而是边界没有定义。一个起始页面可能包含外部链接、下载链接、登录页和无限分页。如果程序见链接就跟很容易跑出预期范围。样品使用 JSON 配置明确约束{start_urls:[https://example.com/],same_domain_only:true,max_pages:5,delay_seconds:1.0,timeout_seconds:20}same_domain_only防止爬虫跳到外部站点max_pages提供明确停止条件访问间隔则避免在短时间内向目标站点发送过多请求。真实项目还可以加入路径白名单例如只允许/docs/或/help/下的页面。二、把站点规则当成程序输入公开可访问不等于可以无限制抓取。程序会根据目标域名读取robots.txt若规则不允许当前 User-Agent 访问某个 URL就记录为blocked_by_robots而不是尝试绕过。待访问 URL - 检查协议与域名 - 查询 robots.txt - 获取 HTML - 校验 Content-Type - 提取标题、正文和链接 - 写入结果或错误记录这份样品不处理登录、验证码、付费墙或访问控制。需要身份验证的数据只能在客户明确拥有权限并提供合规测试环境时另行设计。三、正文提取不能把脚本和样式一起保存直接读取 HTML 的全部文本经常会混入 JavaScript、CSS、导航噪声和隐藏内容。样品基于 Python 标准库的HTMLParser跳过script、style、noscript和svg等标签并合并可见文本。每个页面最终产生一条结构化记录{url:https://example.com/guide,title:Getting Started,text:...,status:ok,error:}若页面超时、返回非 HTML 内容或解析失败程序仍保留 URL、状态和错误原因。这样客户能区分“页面没有内容”和“程序没有成功访问”。四、用离线测试验证核心逻辑网络测试容易受外部站点波动影响因此样品的自动测试不访问互联网而是验证两部分确定性逻辑HTML 中的标题、正文和链接是否正确提取同域限制、协议过滤和 URL 标准化是否正确。运行方式cddemos/public-web-text-scraper python-munittest-v真正交付前还应在客户允许的目标站点上做小样本验收并确认字符编码、分页方式、字段完整率和重复数据处理方式。五、真实项目可以怎样扩展基于这份骨架常见扩展包括指定 CSS/XPath 字段下载 PDF 与文本附件增量抓取与内容去重JavaScript 渲染页面支持Windows 图形界面或可执行文件定时运行、结构化日志和有限重试输出到数据库、Excel 或内部 API。报价前需要客户提供目标 URL、字段清单、预计页数、运行频率和验收样例。对于公开、范围清晰的小任务可以先做 3–5 个页面的最小验证再扩展到完整范围。需要类似工具可以通过下面的入口提交公开 URL、脱敏样例和期望输出我会先免费判断可行性https://github.com/jhhjwei/codex-runner/issues/new?templatecode-fix-request.yml 本文从范围限制、站点规则、正文提取和离线测试四个方面搭建了公开网页文本抓取器的可交付骨架。 你在网页文本采集中最常遇到的是分页、动态渲染、字段变化还是内容去重问题 关注《Python 自动化接单实战》下一篇继续处理 PDF 文本与表格提取中的版式边界。参考来源Dev.to6 Open Source Tools That Give You the Web BackHacker NewsRemoving React.js and adapting htmx