第一步必须检查目标网站根目录下的robots.txt文件,如https://example.com/robots.txt,依据user-agent、disallow、allow等规则判断路径是否允许抓取,该文件虽无强制力但构成合规底线和司法参考依据。

检查 robots.txt 并确认可抓取范围
不是所有公开网页都允许爬虫访问,第一步必须查看目标站点根目录下的 /robots.txt。比如访问 https://example.com/robots.txt,看是否有 Disallow: 规则覆盖你要抓的路径。
常见陷阱:有些网站把关键数据放在 /api/ 或 /data/ 下,但 robots.txt 明确禁止该路径;也有网站虽未禁止,但页面底部注明“禁止自动化采集”——这类声明具有法律效力,需规避。
- 只抓
Allow列出或未被Disallow拦截的路径 - 避开
User-agent: *下明确禁止的目录(如/search、/login) - 若
robots.txt不存在,不等于可以任意抓;仍需参考网站Terms of Service页面
设置合理请求头与频率控制
服务器通过请求特征识别爬虫,User-Agent 不合法或请求过快,会直接返回 403 或封IP。PHP里用 curl_setopt() 设置基础头信息是底线,但仅设 User-Agent 远不够。
真实浏览器请求至少包含 User-Agent、Accept、Accept-Language 和 Referer。单次请求后加 sleep(2) 是最低要求,多页循环时建议用 usleep(rand(1500000, 3000000))(1.5–3秒随机延时)。
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36')- 避免固定间隔,否则容易被频率规则识别
- 不要并发发起多个请求——PHP默认无连接池,
curl_multi也需手动限速
处理动态渲染内容的替代方案
如果目标页面靠 JavaScript 渲染核心数据(比如用 fetch() 加载表格),直接用 DOMDocument 解析 curl_exec() 返回的 HTML 会拿不到内容——因为原始 HTML 里只有空容器。
此时不能硬上 Headless 浏览器(如 Panther),除非你真需要那部分数据且已获授权。更合规的做法是:打开浏览器开发者工具 → Network 标签 → 刷新页面 → 找到 XHR/Fetch 请求 → 复制其 URL 和请求头 → 在 PHP 中用 curl 直接调用该接口。
- 优先分析 AJAX 接口,而非渲染后的 DOM
- 注意接口是否带签名、时间戳或 Token,这些参数通常由前端 JS 动态生成,需逆向或放弃
- 若接口明确要求 Referer 或 Origin 头,必须严格复现,否则返回
401或空数据
存储与使用数据时的边界提醒
抓回来的数据怎么存、怎么用,同样影响合法性。把整站文章缓存到本地并对外提供镜像服务,属于侵权;但提取标题、发布时间、摘要三项字段存入内部数据库供员工查阅,通常视为合理使用。
关键分界点在于:是否改变原内容呈现方式、是否绕过原站流量、是否用于商业竞争性用途。政府网站、法院裁判文书网等明确开放的数据,一般允许结构化存档,但仍需保留来源链接和更新时间戳。
- 避免存储完整 HTML 页面(尤其是含广告、用户评论等内容)
- 导出 CSV 时,字段名不要照搬原站版权标识(如把 “©2025 XX公司” 当作字段值)
- 若数据含个人姓名、联系方式,即使公开,也需评估 GDPR 或《个人信息保护法》适用性
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











