AI 写网页抓取器时,先生成受控请求清单。把站外地址和robots禁止路径过滤掉,再讨论提取字段,不应把所有模型建议链接都直接请求。
用AI辅助编写网页采集器的开发者。本文使用 Python 3.11 或以上版本的标准库,先验证一组人工构造的小样本。AI 负责提出实现或解释差异,结果由本地检查决定;这里没有把模型回答当成真实运行结果。

验证网页采集的地址范围前,先定规则
演示仅使用本地robots文本与example.com虚构地址,没有发网络请求。目标域、User-Agent和种子地址由开发者固定。
同站判断看scheme、hostname和端口,不用字符串前缀。example.com.evil不是example.com。
robots规则表达抓取偏好,不是授权证明。真实任务还需具备资料使用权限与站点适用约定。
给 AI 的输入要包含什么
把下面这份输入说明和你的实际样本一起交给可用的 AI 编程助手。示例只含虚构数据;对真实材料先去除账号凭据和个人信息。
生成待抓取计划:仅https://example.com同站,robots禁止/private/。解析相对链接后验证scheme/hostname/port、拒绝站外与javascript。只返回计划,不联网。
要求模型保留检查条件,并把它认为缺少的业务定义列出来。若回答改变了输入字段、忽略异常分支或直接删除原材料,先要求修正,再运行。提示词的作用是缩小任务范围,验收仍以代码和数据为准。
保存并运行最小验证程序
下方程序把关键规则和验证用例放在同一个可复跑示例中,便于先理解输入如何变成输出,再用它检查 AI 给出的实现。
新建一个空目录,把下面代码保存为 check.py,在该目录打开终端,运行 python -X utf8 check.py。代码自带示例输入,不需要安装第三方库。
from urllib.parse import urljoin,urlsplit
from urllib.robotparser import RobotFileParser
base='https://example.com/'
rp=RobotFileParser();rp.parse(['User-agent: *','Disallow: /private/'])
def allowed(link):
url=urljoin(base,link);u=urlsplit(url)
if (u.scheme,u.hostname,u.port)!=('https','example.com',None): return False
return rp.can_fetch('AIStudyBot',url)
links=['/public/a','/private/a','https://example.com.evil/a','javascript:alert(1)']
plan=[urljoin(base,x) for x in links if allowed(x)]
assert plan==['https://example.com/public/a']
print('plan',plan)
print('network_requests',0)
怎样判断结果符合要求
计划只有public/a,network_requests为0,演示验证规则而不是声称成功采集网站。
下方是这份最小示例在本地执行得到的输出。它验证示例程序与断言的关系,不代表任何 AI 模型一次就能生成同样代码,也不构成性能或生产可靠性结论。
plan ['https://example.com/public/a']
network_requests 0
URL片段、重定向与解析后的地址需要另外检查,不能只验证第一次请求地址。
正式联网读取robots失败时,不把失败默认当全部允许。
哪些失败必须停下来处理
HTTP重定向可能跳到站外,应在每一跳重新检查范围;DNS与内网地址还需防SSRF规则。
robots允许也不表示可以高频访问或获取登录数据,频率与授权需另核对。
接入自己的任务前再核对一次
让AI生成抓取实现时保留已验证的范围函数,并加超时、响应大小和失败清单。
只采集任务所需字段,保存来源与采集时间,后续AI总结引用实际读取材料。
资料与适用范围
RobotFileParser.parse解析robots文本,can_fetch判断指定User-Agent对URL的访问规则。以下链接核对于 2026-10-03;运行环境及额外依赖按本文前述说明。
相关基础可阅读 用ChatGPT写Python爬虫脚本:入门教程与实用技巧。本文的重点是验证网页采集的地址范围,可以把两项检查作为不同步骤保留。
Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/33433.html