🗣 Wd提问: 爬虫防封ip
🤖 Ai回答: 在进行网络爬虫开发时,为了避免 IP 被目标网站封禁(即“IP 被封”),可以采取一系列策略来降低被检测和封锁的风险。以下是一些常见且有效的防封 IP 措施:
一、基础防护策略
1、设置合理的请求间隔(延迟)
不要频繁发送请求,模拟人类浏览行为。
使用 `time.sleep()` 在每次请求之间加入随机延迟(如 1~3 秒)。
python
import time
import random
time.sleep(random.uniform(1, 3))
2、使用随机 User-Agent
每次请求更换不同的 User-Agent,避免被识别为爬虫。
python
import random
user_agents = [
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36,
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36,
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36
]
headers = {
User-Agent: random.choice(user_agents)
}
3、添加 Referer 和 Accept-Language 等常见头信息
让请求更像浏览器行为。
python
headers = {
User-Agent: Mozilla/5.0...,
Referer: https://www.google.com/,
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
}
二、使用代理 IP 池
1、使用代理服务器
避免单一 IP 发送大量请求。
可以使用免费或付费代理服务(如快代理、芝麻代理、阿布云等)。
python
proxies = {
http: http://your-proxy-ip:port,
https: https://your-proxy-ip:port
}
requests.get(url, proxies=proxies, headers=headers)
2、构建动态代理池
维护一个可用代理的列表,定期检测有效性,轮换使用。
python
import requests
proxy_list = [ip1:port, ip2:port, ...]
def get_with_proxy(url):
proxy = random.choice(proxy_list)
try:
return requests.get(url, proxies={http: proxy, https: proxy}, timeout=5)
except:
proxy_list.remove(proxy) 移除失效代理
return None
3、使用 Tor 或 SOCKS 代理
更高级的匿名方式(注意:可能较慢)。
三、处理 Cookies 和会话
使用 `requests.Session()` 保持会话,模拟登录状态。
自动处理 Cookie,避免被识别为异常行为。
python
session = requests.Session()
session.headers.update({User-Agent: ...})
response = session.get(url)
四、应对反爬机制
1、识别并绕过验证码
使用打码平台(如超级鹰、云打码)或 OCR 工具自动识别。
对于滑块、点选验证码,可结合 Selenium + 图像识别。
2、避免触发频率限制
分析目标网站的限流规则(如每分钟最多10次请求)。
控制并发量,使用队列控制请求节奏。
3、使用 Selenium 或 Playwright 模拟浏览器
对 JavaScript 渲染页面有效,行为更接近真实用户。
但资源消耗大,速度慢。
python
from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument(headless)
driver = webdriver.Chrome(options=options)
driver.get(url)
五、分布式与多IP部署
1、部署在多个服务器上
利用云服务器(如阿里云、AWS)分布在不同地区。
每台服务器使用独立 IP。
2、使用动态出口 IP(如 NAT 实例)
AWS 的弹性 IP 可绑定到不同实例,实现 IP 轮换。
3、结合 CDN 或代理服务商提供的轮换 IP 功能
六、其他建议
遵守 robots.txt:尊重网站爬虫协议,避免抓取禁止内容。
监控 IP 状态:定期检查是否被封,及时更换。
日志记录与异常处理:捕获 403、429 等状态码,自动切换策略。
合法合规:确保爬虫用途合法,避免侵犯隐私或造成服务器压力。
示例:综合防封策略代码片段
python
import requests
import time
import random
from fake_useragent import UserAgent
ua = UserAgent()
proxy_list = [http://ip1:port, http://ip2:port]
def crawl(url):
headers = {User-Agent: ua.random}
proxy = random.choice(proxy_list)
try:
resp = requests.get(
url,
headers=headers,
proxies={http: proxy, https: proxy},
timeout=10
)
if resp.status_code == 200:
return resp.text
else:
print(fBlocked: {resp.status_code})
except Exception as e:
print(fError with {proxy}: {e})
return None
调用
for i in range(10):
content = crawl(https://65.hk/page)
time.sleep(random.uniform(1, 3))
总结
| 方法 | 说明 |
| 延迟请求 | 防止频率过高 |
| 随机 UA | 避免特征识别 |
| 使用代理 | 分散请求来源 |
| 模拟浏览器 | 绕过 JS 加密或检测 |
| 分布式部署 | 提高稳定性与隐蔽性 |
⚠️ 注意:任何爬虫都应遵守法律法规和网站规定,不得用于非法目的或对服务器造成过大负担。
如果你有具体的网站或场景(如京东、微博、知乎等),我可以提供更有针对性的防封方案。
📣 商家广告 :
👍
0
👎
IP地址: 104.19.38.135
搜索次数: 8
提问时间: 2025-12-15 20:30:25
本站所有
❓
问答
均由Ai自动分析整理,内容仅供参考,若有误差请用“联系”里面信息通知我们人工修改或删除。
本站由
🟢
豌豆Ai
提供技术支持,使用的最新版:
豌豆Ai站群搜索引擎系统 V.25.10.25
搭建本站。