看一个网站好不好爬,主要看这几个地方,上手试一下就知道了。
1. 先看基础防护
直接用requests发个GET请求,看返回的状态码和内容。如果直接返回200且是正常HTML,那基础门槛就过了。如果遇到403、429,或者返回一堆JS而不是HTML,那就说明有基础防护了。
import requests
url = "https://example.com"
try:
resp = requests.get(url, timeout=10)
print(f"状态码: {resp.status_code}")
print(f"内容类型: {resp.headers.get('Content-Type')}")
# 简单检查是不是常见反爬页面
if "access denied" in resp.text.lower() or "cloudflare" in resp.text.lower():
print("⚠️ 可能遇到反爬或WAF")
except Exception as e:
print(f"请求失败: {e}")
2. 看关键数据怎么来的
打开浏览器开发者工具(F12),到Network(网络)选项卡,刷新页面。重点关注:
- XHR/Fetch请求:很多网站的数据是后面通过JS请求(AJAX)加载的JSON,你需要找到这些API接口。
- 查看请求头:特别是
Authorization、X-Requested-With这些,模拟起来可能麻烦。
- 检查响应:如果数据直接嵌在初始HTML的某个变量里(比如
<script>window.DATA = {...}</script>),那还算简单,用正则或json模块就能提出来。
3. 试试绕开简单限制
很多网站会检查User-Agent,不加的话容易被拦。顺手把常用头都带上,看看会不会更顺利。
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
}
resp = requests.get(url, headers=headers)
4. 核心难点判断
如果上面几步都搞不定,那大概率是遇到硬茬了,比如:
- 参数签名/加密:请求带一堆
sign、token、timestamp参数,且每次都会变。你得逆向JS找加密逻辑。
- 高强度验证:像Google reCAPTCHA v3这种,普通爬虫基本无解。
- 行为分析:网站监控鼠标移动、点击节奏,用无头浏览器(如Selenium)可能也会被识别。
- 法律与合规风险:看
robots.txt,检查网站条款,有些明确禁止爬取。
总结一下:
先requests探路,再用开发者工具看数据源和请求细节,带个标准头再试试。还不行的话,就准备面对JS逆向或无头浏览器吧。
一句话建议:先手动模拟浏览器操作,观察网络请求,这是判断爬取难度的最快方法。