
写爬虫最头疼的问题,莫过于本地固定IP频繁请求后被网站封禁。之前踩了不少坑,发现单纯改代码、加延时远远不够,轮换代理IP才是解决IP封禁的核心办法。
免费代理是新手练手、临时爬虫的最优解,就是手动筛选太麻烦。今天就分享一套简洁好用的Python脚本,自动抓取、批量校验代理IP,快速筛选出可用资源,全程实操、干货不啰嗦。
网站反爬系统会精准识别爬虫的异常访问特征,核心检测点就三个:高频重复请求、无合规浏览器请求头、固定机械的访问节奏。单一IP持续高频访问,会被系统直接判定为风险用户,触发拉黑机制,这也是爬虫频繁封IP的根本原因。
想要爬虫稳定运行,只需三套核心操作搭配使用,新手也能快速上手:
1. 伪装浏览器请求:配置正规UA请求头,模拟真实用户访问,绕过基础反爬校验。
2. 轮换代理IP池(核心):用多IP轮换发起请求,避免单一IP暴露,大幅降低封禁概率。
3. 随机延时访问:模拟人工浏览停顿节奏,打破固定请求规律,规避行为风控。
市面上多数免费代理失效快、质量差,筛选了一圈,主流免费代理站点资源更新及时、协议齐全,支持HTTP、HTTPS、Socks等主流协议,还标注了延迟、地区信息,非常适合用来做脚本测试。
整套脚本分为抓取、验证两大模块,代码精简无冗余,复制即可直接运行。
pip install requests beautifulsoup4自动解析代理站点表格数据,批量提取IP和端口,整理为标准代理格式:
import requests
from bs4 import BeautifulSoup
def fetch_proxy():
url = "https://www.66daili.com/"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}
try:
resp = requests.get(url, headers=headers, timeout=10)
resp.encoding = 'utf-8'
soup = BeautifulSoup(resp.text, 'html.parser')
proxy_list = []
rows = soup.select('tr.odd')
for row in rows:
cols = row.find_all('td')
if len(cols) >= 2:
ip = cols[0].text.strip()
port = cols[1].text.strip()
proxy_list.append(f"http://{ip}:{port}")
return proxy_list
except Exception as e:
print(f"代理抓取失败: {e}")
return []
if __name__ == "__main__":
proxy_list = fetch_proxy()
print(f"成功抓取候选代理IP数量:{len(proxy_list)}")
for p in proxy_list[:5]:
print(p)通过稳定的公共测试接口校验代理有效性,过滤所有失效、超时的IP:
def verify_proxy(proxy, test_url="http://httpbin.org/ip", timeout=5):
try:
response = requests.get(
test_url,
proxies={"http": proxy, "https": proxy},
timeout=timeout
)
return response.status_code == 200
except Exception:
return False
valid_proxies = []
for proxy in proxy_list:
if verify_proxy(proxy):
valid_proxies.append(proxy)
print(f"✓ 可用代理:{proxy}")
else:
print(f"✗ 失效代理:{proxy}")整合抓取、校验、防拦截延时逻辑,适配日常学习和小规模爬虫场景:
import requests
from bs4 import BeautifulSoup
import time
def fetch_proxy():
url = "https://www.66daili.com/"
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"}
try:
resp = requests.get(url, headers=headers, timeout=10)
resp.encoding = 'utf-8'
soup = BeautifulSoup(resp.text, 'html.parser')
proxy_list = []
rows = soup.select('tr.odd')
for row in rows:
cols = row.find_all('td')
if len(cols) >= 2:
ip = cols[0].text.strip()
port = cols[1].text.strip()
proxy_list.append(f"http://{ip}:{port}")
return proxy_list
except Exception as e:
print(f"代理抓取失败: {e}")
return []
def verify_proxy(proxy, test_url="http://httpbin.org/ip", timeout=5):
try:
resp = requests.get(test_url, proxies={"http": proxy, "https": proxy}, timeout=timeout)
return resp.status_code == 200
except:
return False
if __name__ == "__main__":
print("开始抓取免费代理IP...")
raw_proxies = fetch_proxy()
print(f"共抓取 {len(raw_proxies)} 个候选代理,开始批量验证...\n")
available_proxies = []
for idx, proxy in enumerate(raw_proxies, 1):
if verify_proxy(proxy):
available_proxies.append(proxy)
print(f"[{idx}/{len(raw_proxies)}] ✓ 有效:{proxy}")
else:
print(f"[{idx}/{len(raw_proxies)}] ✗ 失效")
time.sleep(0.5)
print(f"\n验证完成!筛选出可用代理共 {len(available_proxies)} 个:")
for valid_proxy in available_proxies:
print(valid_proxy)分享几个新手必看的实操经验,少走弯路:
1. 免费代理时效性极差,无法长期复用,每次跑爬虫前建议重新抓取校验;
2. 可多整合几个免费代理平台,扩充代理池,提升爬虫稳定性;
3. 免费代理仅适合学习测试,高并发、正式项目建议用付费代理;
4. 严格合规使用代理,仅用于合法技术学习和数据采集。
这套自动化代理脚本,完美适配新手练手和临时爬虫需求,不用手动筛选IP,高效解决IP封禁问题。虽然免费代理稳定性有限,但胜在零成本、易上手,代码逻辑通用,可适配各类免费代理站点。有更好的优化思路,欢迎评论区交流!
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。