怎么知道网站是否可以爬虫
打开一个网站,知道你想抓点数据,网站第一件事不是爬虫写代码,是知道看它让不让你抓。这事儿没有玄学,网站几个地方一查就清楚。爬虫
先看根目录下的知道 robots.txt。在浏览器地址栏输入 域名/robots.txt,网站比如 https://www.zhihu.com/robots.txt。爬虫这个文件是知道网站给爬虫看的说明书。里面通常有 User-agent 和 Disallow 两栏。网站如果写着 Disallow: /,爬虫意思就是知道所有爬虫都别碰。如果只写了 Disallow: /search,网站那搜索页面别抓,爬虫其他随意。有些网站更细,会针对百度、谷歌单独设规则。你用的爬虫如果没在 robots.txt 里被点名,默认按 User-agent: * 那一段执行。注意,robots.txt 是君子协定,没有法律强制力,但它是判断网站态度的第一信号。我见过一个电商站,robots.txt 里把价格接口全禁了,但商品列表页没禁——这种就是明摆着告诉你:列表可以看,价格别乱动。
robots.txt 管的是“允不允许”,真正决定你能不能爬的是服务器返回的状态码。用 curl -I 或者浏览器开发者工具看请求头。正常返回 200,说明页面公开。返回 403,服务器直接拒绝,可能是封了你的 IP 或者 User-Agent。返回 429,意思是“你请求太快了,慢点”。最麻烦的是返回 200 但内容是个验证码页面——这种情况在电商和社交平台很常见。你代码里判断 response.status_code == 200 就往下解析,结果抓回来一堆“请拖动滑块”。实际经验:连续请求同一个域名,间隔低于 1 秒,十有八九会触发限流。我试过抓一个新闻站,前 50 页正常,第 51 页开始返回 403,换 IP 后又好了。这就是典型的频率控制。
再看 HTML 里有没有反爬标记。打开页面源码,搜这几个词:captcha、verify、challenge、cloudflare。如果看到 window._cf_chl_opt 或者 __jsl_clearance,说明网站用了 Cloudflare 或类似防护。这类站不是不能爬,但需要处理 JavaScript 渲染和 cookie 验证。更隐蔽的是动态加载——你右键查看源码,发现商品价格是空的,但页面上明明显示着。按 F12 打开网络面板,刷新页面,看 XHR 请求。价格通常藏在某个 JSON 接口里。这时候 robots.txt 可能没禁这个接口,但接口本身需要带 token 或者签名。我抓过一个二手书网站,列表页的 data-price 属性是假的,真实价格在另一个请求里,参数带时间戳和 md5 签名。这种就得逆向 JS,不是简单 requests 能搞定的。
法律层面也得扫一眼。网站底部的“服务条款”或“使用协议”里,经常有一句“禁止使用自动化程序抓取数据”。这不是吓唬人。国内有过判例,抓公开数据但绕过反爬措施,被认定不正当竞争。我的做法:个人学习、小规模、不公开、不商用,一般没人管。但如果要抓几十万条、或者拿去卖钱,先找律师看看。另外,/robots.txt 里如果写了 Crawl-delay: 10,意思是两次请求至少隔 10 秒。你不听,被封 IP 别喊冤。
最后说个笨办法但有效:拿 requests 发一个请求,看返回内容里有没有“访问过于频繁”、“请开启 JavaScript”之类的提示。有,就说明触发了防护。没有,再试着连续请求 5 次,每次间隔 2 秒。如果第 5 次返回的东西和第 1 次一样,基本可以爬。如果第 5 次变成空白或者验证码,那就得加代理、加延迟、或者换策略。别信什么“万能爬虫”,每个网站的反爬强度不一样。我见过最狠的一个,请求头里 User-Agent 少一个空格都返回 403。也见过完全裸奔的政府公开数据站,连 robots.txt 都没有。判断能不能爬,就是看这三个东西:robots.txt 的规则、服务器的状态码和响应内容、以及法律条款里的禁止性表述。三者都过关,再动手写代码。
(责任编辑:探索)














