文章目录
一、为什么要用代理IP?(重要指数★★★★★)
兄弟们!搞爬虫最怕啥?IP被封啊!(别问我怎么知道的…)尤其是招聘网站这种敏感数据源,你连续发几十个请求试试?分分钟给你上黑名单套餐!
举个栗子🌰:
- 某联招聘:单IP每小时限制300次请求
- 某BOSS直聘:动态验证码+行为检测
- 某智联:请求头不全直接返回403
这时候就需要代理IP来拯救世界了!通过不同IP轮换访问,完美规避反爬机制。但是要注意(敲黑板):
- 必须使用高匿代理(别省这点钱)
- 要定期更换IP池(建议每次请求换IP)
- 注意请求间隔(至少3秒以上)
二、准备工作(5分钟速成版)
2.1 推荐工具清单
# 必备三件套
import requests # 请求库(yyds)
from bs4 import BeautifulSoup # 解析神器
import pandas as pd # 数据存储
# 代理服务推荐(自用款)
青果代理(高匿动态)
亮数据(国际站可用)
快代理(性价比高)
2.2 获取代理API(以青果代理为例)
注册后获取的API长这样:
http://api.qinggou.com/getip?num=10&type=json
返回示例:
{
"code": 0,
"data": [
{"ip": "58.220.1.100", "port": 8888},
{"ip": "121.234.5.66", "port": 3128}
]
}
三、实战代码分解(含完整源码)
3.1 核心代码框架
def get_proxy_pool():
"""动态获取最新代理IP"""
api_url = "你的代理API地址"
response = requests.get(api_url).json()
return [f"{ip}:{port}" for item in response['data']]
def crawler_job(keyword, max_page=10):
proxy_pool = get_proxy_pool() # 获取初始IP池
results = []
for page in range(1, max_page+1):
# 随机选择代理(重要!)
current_proxy = random.choice(proxy_pool)
try:
# 设置代理参数(重点看这里!)
proxies = {
"http": f"http://{current_proxy}",
"https": f"http://{current_proxy}"
}
# 模拟真实浏览器(User-Agent池自行补充)
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)..."
}
# 发送请求(带超时设置)
url = f"https://www.zhipin.com/job_detail/?query={keyword}&page={page}"
response = requests.get(url, headers=headers,
proxies=proxies, timeout=10,
verify=False) # 跳过SSL验证
# 解析数据(以某BOSS为例)
soup = BeautifulSoup(response.text, 'lxml')
job_list = soup.select('.job-list li')
for job in job_list:
# 提取关键字段(根据实际页面结构调整)
title = job.select_one('.job-title').text.strip()
salary = job.select_one('.red').text
company = job.select_one('.company-name').text
results.append({
"职位": title,
"薪资": salary,
"公司": company,
"来源": "某BOSS直聘"
})
# 人性化间隔(重要反爬措施!)
time.sleep(random.uniform(3, 5))
except Exception as e:
print(f"第{page}页抓取出错:{str(e)}")
proxy_pool.remove(current_proxy) # 移除失效代理
if not proxy_pool: # IP池空了就重新获取
proxy_pool = get_proxy_pool()
return pd.DataFrame(results)
3.2 执行示例
if __name__ == "__main__":
df = crawler_job("Python开发", max_page=5)
df.to_excel("招聘数据.xlsx", index=False)
print(f"成功抓取{len(df)}条数据!")
四、常见问题排雷指南(血泪经验)
4.1 为什么返回403错误?
- 检查User-Agent是否携带
- 确认代理IP可用性(用http://httpbin.org/ip测试)
- 降低请求频率(加到5秒以上)
4.2 数据解析出乱码?
- 添加
response.encoding = 'utf-8'
- 检查网页源码是否动态加载(考虑上Selenium)
4.3 代理IP失效太快?
- 选择按量付费的高质量代理
- 每次请求前Ping测试连通性
- 设置备用IP池(至少保持20个可用IP)
五、法律红线(必看!!!)
根据《数据安全法》和《个人信息保护法》:
- 不得抓取个人隐私信息(电话、邮箱等)
- 遵守网站的robots.txt协议
- 数据仅用于学习研究,禁止商用
- 单次抓取量控制在1000条以内
六、完整源码获取
关注后私信回复"招聘爬虫"获取带注释的完整版代码(包含IP检测模块和异常重试机制)
后记:最近帮朋友公司抓取竞品招聘数据时,发现某联的反爬升级到了人机验证,这时候就需要上更复杂的方案了(比如IP自动切换+浏览器指纹模拟)。有需要的朋友可以留言,下期咱们专门讲讲高阶反反爬技巧!