在数据获取的过程中,爬虫与反爬就像 “猫鼠游戏”。对于爬虫入门者来说,了解基础的反爬手段和应对方法,是顺利获取数据的关键。本文将从概念入手,结合实战代码,带你快速掌握爬虫反爬基础。

一、爬虫与反爬基础概念

  1. 爬虫:通过编写程序,自动向网站发送请求、获取网页数据,并提取有用信息的工具(常见语言:Python,常用库:requests、BeautifulSoup、Scrapy)。
  2. 反爬:网站为阻止非法爬虫获取数据、保护服务器资源,采取的一系列限制措施(核心目的:区分 “人类用户” 和 “爬虫程序”)。

二、常见反爬手段及反制方案(附代码)

1. 反爬手段 1:User-Agent 验证

原理

网站通过 User-Agent(请求头中的标识信息)判断访问者身份。默认的 Python 爬虫 User-Agent 带有明显 “爬虫特征”(如 python-requests/2.31.0),会被网站直接拦截。

反制方案:设置随机合法 User-Agent
代码示例(使用 fake_useragent 库生成随机 UA)
# 1. 安装依赖库
# pip install requests fake-useragent

import requests
from fake_useragent import UserAgent

# 2. 生成随机合法的 User-Agent
ua = UserAgent(verify_ssl=False)  # verify_ssl=False 解决部分环境证书问题
headers = {
    "User-Agent": ua.random  # 随机获取一个浏览器 UA(如 Chrome、Firefox 等)
}

# 3. 发送请求(以爬取“豆瓣电影TOP250”为例)
url = "https://movie.douban.com/top250?start=0"
try:
    response = requests.get(url, headers=headers, timeout=5)
    # 4. 验证请求是否成功(状态码 200 表示成功)
    if response.status_code == 200:
        print("请求成功!")
        print("网页前100字符:", response.text[:100])
    else:
        print(f"请求失败,状态码:{response.status_code}")
except Exception as e:
    print(f"请求出错:{e}")

2. 反爬手段 2:IP 封禁

原理

网站通过记录访问 IP 的请求频率,若短时间内同一 IP 发送大量请求(远超人类操作速度),则判定为爬虫,封禁该 IP(常见表现:访问时出现 “403 Forbidden” 或 “503 Service Unavailable”)。

反制方案:使用代理 IP 池
代码示例(使用代理 IP 发送请求)
import requests
from fake_useragent import UserAgent

# 1. 准备代理 IP(注意:示例 IP 可能失效,需替换为有效代理,可从代理平台获取)
proxies = {
    "http": "http://123.45.67.89:8080",  # HTTP 代理
    "https": "https://123.45.67.89:8443"  # HTTPS 代理
}

# 2. 随机 User-Agent + 代理 IP
ua = UserAgent(verify_ssl=False)
headers = {"User-Agent": ua.random}

url = "https://movie.douban.com/top250?start=0"
try:
    # 3. 携带代理发送请求
    response = requests.get(
        url,
        headers=headers,
        proxies=proxies,
        timeout=5
    )
    if response.status_code == 200:
        print("代理 IP 请求成功!")
    else:
        print(f"代理请求失败,状态码:{response.status_code}")
except Exception as e:
    print(f"代理请求出错(可能代理失效):{e}")

提示:代理 IP 需选择 “高匿代理”(避免被网站识别为代理),且定期更换以保证有效性。

3. 反爬手段 3:Cookie 验证

原理

部分网站需要用户登录后才能访问数据(如知乎、微博),登录状态通过 Cookie 标识。若爬虫请求时不带 Cookie 或 Cookie 失效,会被 redirect 到登录页。

反制方案:携带登录后的 Cookie
代码示例(手动获取 Cookie 并携带请求)
import requests

# 1. 获取登录后的 Cookie(步骤:浏览器登录网站 → F12 打开开发者工具 → 网络 → 刷新页面 → 选一个请求 → 查看“请求头”中的 Cookie)
cookie_str = "bid=xxxxxx; dbcl2=xxxxxx; _pk_ref.100001.4cf6=xxxxxx;"  # 替换为你的真实 Cookie

# 2. 转换 Cookie 格式(requests 需字典格式)
cookies = {item.split("=")[0]: item.split("=")[1] for item in cookie_str.split("; ")}

# 3. 携带 Cookie 和 User-Agent 请求(以知乎“热榜”为例)
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36"
}
url = "https://www.zhihu.com/hot"

try:
    response = requests.get(url, headers=headers, cookies=cookies, timeout=5)
    if response.status_code == 200:
        print("携带 Cookie 请求成功!")
        print("知乎热榜页面标题:", response.text.split("<title>")[1].split("</title>")[0])
    else:
        print(f"Cookie 请求失败,状态码:{response.status_code}")
except Exception as e:
    print(f"请求出错:{e}")

4. 反爬手段 4:robots 协议

原理

robots.txt 是网站根目录下的 “爬虫规则文件”,明确告知爬虫哪些页面可爬、哪些不可爬(如 Disallow: /api/ 表示禁止爬取 /api/ 路径下的内容)。虽不具备法律约束力,但尊重协议是爬虫的基本伦理。

反制方案:解析 robots 协议,遵守爬取规则
代码示例(使用 urllib.robotparser 解析 robots 协议)
from urllib.robotparser import RobotFileParser
from urllib.parse import urljoin

# 1. 目标网站的 robots.txt 地址
base_url = "https://movie.douban.com/"
robots_url = urljoin(base_url, "/robots.txt")

# 2. 解析 robots 协议
rp = RobotFileParser()
rp.set_url(robots_url)
rp.read()  # 读取并解析 robots.txt 内容

# 3. 判断目标页面是否允许爬取(以豆瓣电影 TOP250 为例)
target_url = "https://movie.douban.com/top250?start=0"
user_agent = "MyCrawler/1.0"  # 自定义爬虫标识

if rp.can_fetch(user_agent, target_url):
    print(f"根据 robots 协议,{user_agent} 允许爬取 {target_url}")
else:
    print(f"根据 robots 协议,{user_agent} 禁止爬取 {target_url}")

三、爬虫伦理与法律风险

  1. 遵守 robots 协议:不爬取网站明确禁止的内容;
  2. 控制爬取频率:通过 time.sleep() 设置请求间隔(如 time.sleep(1) 表示每秒爬一次),避免压垮服务器;
  3. 不爬取敏感数据:身份证、手机号、隐私信息等受法律保护,禁止非法获取;
  4. 尊重网站版权:如需商用爬取的数据,需提前获得网站授权。

四、总结

入门爬虫反爬,核心是 “模拟人类行为”:通过合法 User-Agent、代理 IP、有效 Cookie 绕过网站限制,同时严格遵守伦理和法律。本文的代码示例可直接运行(需替换代理、Cookie 等个性化信息),建议从简单网站(如豆瓣、博客园)开始实践,逐步积累复杂反爬(如验证码、JS 加密)的应对经验。

如果在实践中遇到问题(如代理失效、Cookie 过期),欢迎随时交流,我们可以一起排查解决!

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐