文章目录
一、前言:为什么要用代理IP?
兄弟们!!!(敲黑板)做爬虫最怕什么?当然是IP被封啊!想象一下你正在抓取某招聘网站数据,突然发现所有请求都返回403错误——恭喜你,喜提"小黑屋"体验卡一张(苦笑)。这时候代理IP就是你的救命稻草!
二、基础装备准备
2.1 推荐环境配置
- Python 3.8+(别问为什么,问就是新版本香)
- requests库(
pip install requests
) - BeautifulSoup4(
pip install beautifulsoup4
) - 代理IP池(这里推荐免费的www.zdaye.com,但商业项目建议买付费服务)
2.2 核心原理图
你的爬虫 -> 代理服务器 -> 目标网站
(完美隐身!)
三、实战代码分解(含避坑指南)
3.1 基础请求模板
import requests
from bs4 import BeautifulSoup
def get_job_data(keyword, proxy):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) ...'
}
try:
response = requests.get(
f'https://www.liepin.com/zhaopin/?key={keyword}',
proxies={'http': proxy, 'https': proxy},
headers=headers,
timeout=10
)
if response.status_code == 200:
soup = BeautifulSoup(response.text, 'lxml')
# 解析逻辑放这里...
return soup
else:
print(f'请求失败,状态码:{response.status_code}')
return None
except Exception as e:
print(f'发生异常:{str(e)}')
return None
3.2 重点参数说明(必看!)
proxies
参数:格式必须是{'http': 'ip:port', 'https': 'ip:port'}
timeout
设置:建议5-15秒,太短容易误判,太长影响效率- User-Agent:要伪装成浏览器访问(重点防御点!)
3.3 代理IP轮换策略
import random
class ProxyPool:
def __init__(self):
self.proxies = [
'112.85.130.35:9999',
'183.166.103.82:9999',
#...至少准备10个以上
]
def get_random_proxy(self):
return random.choice(self.proxies)
# 使用示例
proxy = ProxyPool().get_random_proxy()
四、反反爬虫进阶技巧(干货预警)
4.1 请求频率控制
import time
import random
# 在每次请求后加入随机等待
time.sleep(random.uniform(1.5, 3.5)) # 随机等待1.5-3.5秒
4.2 伪装技巧三件套
- 随机User-Agent:准备10个以上不同浏览器的UA随机使用
- Referer设置:伪装成从站内跳转过来的
- Cookie处理:定期更新登录态(需要配合自动化登录)
4.3 终极防御:分布式代理池
(适合企业级应用)
五、法律红线(超级重要!!!)
- 不要爬取个人隐私信息(电话号码、邮箱等)
- 遵守网站的robots.txt协议
- 单日访问量控制在网站承受范围内
- 建议在22:00-8:00间进行数据采集(降低服务器压力)
六、常见报错解决方案
6.1 错误代码大全
错误码 | 含义 | 解决方案 |
---|---|---|
403 | 访问被拒绝 | 更换代理IP/降低频率 |
429 | 请求过于频繁 | 增加请求间隔时间 |
503 | 服务不可用 | 暂停爬虫,等待恢复 |
6.2 ConnectionError处理
try:
# 你的请求代码
except requests.exceptions.ProxyError:
print("代理服务器不可用,正在更换代理...")
proxy = get_new_proxy()
except requests.exceptions.ConnectTimeout:
print("连接超时,正在重试...")
七、项目优化方向
7.1 数据存储方案
- 小数据量:CSV文件(简单直接)
- 中等数据:MySQL/MongoDB
- 大数据:Elasticsearch
7.2 可视化展示(装X必备)
import pandas as pd
import matplotlib.pyplot as plt
# 示例:绘制薪资分布图
df = pd.read_csv('jobs.csv')
df['salary'].plot(kind='hist')
plt.show()
八、写在最后
爬虫就像一场攻防战(笑),但记住:技术无罪,使用有道!建议大家在实战前仔细阅读《网络安全法》和《数据安全法》,本文代码仅供学习交流,请勿用于商业用途或非法目的。
(代码已上传Github,需要的小伙伴可以私信获取~)