一、开篇:爬虫界的“身份证”危机
朋友,你是否曾兴冲冲写了个爬虫,结果下一秒就被网站封IP?抓到的不是数据,而是冷冰冰的“403 Forbidden”?别慌!这八成是你的爬虫“身份证”暴露了——身份识别,正是爬虫与反爬虫大战的核心密码!
举个栗子🌰:
你用Python的requests库直接访问豆瓣电影:
import requests
response = requests.get("https://movie.douban.com/")
print(response.status_code) # 输出418:“我是茶壶,不想泡咖啡”
(注:418是彩蛋状态码,实际可能遇到403或封IP)
为什么?因为网站服务器一看你的请求头——
User-Agent: python-requests/2.28.1
明晃晃写着:“我是爬虫,快来封我!”
这就好比戴着“我是小偷”的帽子进金库,不抓你抓谁?
二、身份识别的三大战场:请求头、IP和行为模式
1. User-Agent:爬虫的“工作服”
每个浏览器访问网站时,都会在请求头里带上User-Agent,比如Chrome的:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
这串“神秘代码”告诉服务器:“我是正经浏览器!”
实战技巧:
- 伪造User-Agent池,每次随机选择:
from fake_useragent import UserAgent
import requests
ua = UserAgent()
headers = {
'User-Agent': ua.random,
'Accept-Language': 'zh-CN,zh;q=0.9',
'Referer': 'https://www.douban.com/'
}
response = requests.get("https://movie.douban.com/", headers=headers)
(注:安装fake_useragent库:pip install fake-useragent)
2. IP地址:爬虫的“家庭住址”
单个IP高频请求?秒变“重点监控对象”!解决方案:
- 代理IP池:让请求从不同IP发出,深藏功与名
- 延迟策略:请求间随机休眠,模仿人类手速
import time
import random
from itertools import cycle
# 简易代理IP池示例(需替换为有效IP)
proxies_list = [
{'http': 'http://123.456.789.1:8080'},
{'http': 'http://123.456.789.2:8080'},
]
proxy_pool = cycle(proxies_list)
for page in range(5):
proxy = next(proxy_pool)
try:
response = requests.get(url, proxies=proxy, timeout=5)
print(f"第{page+1}页抓取成功!")
except:
print("代理失效,换下一个!")
time.sleep(random.uniform(1, 3)) # 随机休眠1-3秒
3. 行为指纹:爬虫的“走路姿势”
即使伪装了身份,你的“机器人步态”也可能出卖你:
- 鼠标轨迹太规律?
- 点击速度反人类?
- 总在深夜精准操作?
应对方案:
# 模拟人类随机滚动页面
from selenium import webdriver
import random
driver = webdriver.Chrome()
driver.get("https://movie.douban.com/")
# 随机滚动页面模仿人类浏览
for _ in range(5):
height = random.randint(200, 800)
driver.execute_script(f"window.scrollBy(0, {height});")
time.sleep(random.uniform(0.5, 2))
三、完整实战:爬取豆瓣电影TOP250(附详细注释)
目标:在不触发反爬的情况下,获取电影名称、评分、经典台词
import requests
from bs4 import BeautifulSoup
import time
import random
from fake_useragent import UserAgent
def get_douban_movies():
ua = UserAgent()
base_url = "https://movie.douban.com/top250"
movies_data = []
for start in range(0, 250, 25): # 共10页,每页25条
# 动态构造请求头
headers = {
'User-Agent': ua.random,
'Referer': 'https://movie.douban.com/chart',
'Cookie': '你的登录Cookie(如需)' # 重要!登录后更安全
}
params = {'start': start}
try:
# 添加随机延迟,降低请求频率
time.sleep(random.uniform(1, 3))
response = requests.get(
base_url,
headers=headers,
params=params,
timeout=10
)
if response.status_code == 200:
soup = BeautifulSoup(response.text, 'html.parser')
items = soup.find_all('div', class_='item')
for item in items:
# 解析电影信息
title = item.find('span', class_='title').text
rating = item.find('span', class_='rating_num').text
quote_elem = item.find('span', class_='inq')
quote = quote_elem.text if quote_elem else "暂无引用"
movies_data.append({
'title': title,
'rating': rating,
'quote': quote
})
print(f"已爬取 {len(movies_data)} 部电影信息...")
else:
print(f"请求异常,状态码:{response.status_code}")
except Exception as e:
print(f"第{start//25+1}页爬取失败:{str(e)}")
continue
return movies_data
if __name__ == "__main__":
movies = get_douban_movies()
print("\n=== 爬取结果示例 ===")
for i, movie in enumerate(movies[:3]): # 展示前3条
print(f"{i+1}. 《{movie['title']}》 评分:{movie['rating']} 经典台词:{movie['quote']}")
技术要点解析:
- 随机User-Agent:每次请求更换浏览器身份
- Referer伪装:告诉服务器“我从正经页面跳转来的”
- 速率控制:随机休眠避免请求风暴
- 异常处理:单个页面失败不影响整体任务
- 超时设置:避免长时间等待卡死
四、高级伪装:当普通爬虫穿上“隐形斗篷”
1. 会话保持技术
session = requests.Session()
session.headers.update({'User-Agent': ua.random})
# 首次访问获取cookies
session.get("https://douban.com")
# 后续请求自动携带cookies,更像真实用户
2. 浏览器自动化伪装
使用Selenium + Chrome Driver:
options = webdriver.ChromeOptions()
options.add_argument('--headless') # 无界面模式
options.add_argument(f'user-agent={ua.random}')
options.add_experimental_option('excludeSwitches', ['enable-automation'])
driver = webdriver.Chrome(options=options)
driver.get("https://movie.douban.com/")
3. 应对高级反爬:JavaScript渲染与验证码
- 对于动态加载内容:使用Selenium或Playwright
- 遇到验证码:接入打码平台或机器学习识别(成本较高)
五、伦理提醒:做个有“武德”的爬虫侠
- 遵守robots.txt:访问网站/robots.txt查看爬虫协议
- 控制访问频率:别把人家网站爬崩了
- 尊重版权隐私:敏感数据不乱用
- 商业用途需授权:赚钱的事得按规矩来
记住:技术是把双刃剑,你的爬虫可以是大数据研究的得力助手,也可能变成网络空间的“拆迁队”——分寸感是关键!
六、结语:从“脚本小子”到“爬虫艺术家”
身份识别就像爬虫界的“化妆术”——
- 初级:裸奔请求,秒被封
- 中级:简单伪装,偶尔成功
- 高级:多重身份,浑然天成
掌握本文技巧后,你的爬虫将完成从“铁憨憨”到“变形金刚”的进化!不过切记:能力越大,责任越大。Happy Crawling!🚀

被折叠的 条评论
为什么被折叠?



