文章目录
一、为什么要用代理IP搞招聘数据?(这个坑我踩过!)
最近帮朋友公司做人才市场分析,结果爬某招聘网站的时候(你懂的),不到半小时IP就被封了!(气到摔键盘.jpg)后来发现:
- 高频访问必封IP:同一IP每秒多次请求,分分钟进黑名单
- 验证码地狱:突然弹出滑动验证码,脚本直接懵逼
- 数据不全:很多岗位信息需要登录才能查看完整版
这时候代理IP就派上用场了!实测用优质代理池后,数据获取成功率从30%飙升到92%!(亲测有效)
二、准备工作(别急着写代码!)
2.1 装备清单
- Python 3.8+(老版本可能有库兼容问题)
- requests库(
pip install requests
) - BeautifulSoup4(
pip install beautifulsoup4
) - 代理IP服务(推荐付费的,免费的基本不能用!)
2.2 重要提示(血泪教训!)
- 查看网站robots.txt(比如:https://www.zhipin.com/robots.txt)
- 设置合理请求间隔(建议3-5秒/次)
- 伪装User-Agent(准备10个以上浏览器标识)
三、实战代码分解(附避坑指南)
3.1 基础爬虫框架
import requests
from bs4 import BeautifulSoup
import time
import random
headers_pool = [
{'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit...'},
# 准备至少10个不同的UA
]
def get_jobs(keyword, proxy):
url = f'https://www.zhipin.com/web/geek/job?query={keyword}'
try:
# 随机选User-Agent
headers = random.choice(headers_pool)
# !!!代理IP核心配置!!!
response = requests.get(url,
headers=headers,
proxies={'http': proxy, 'https': proxy},
timeout=10)
if response.status_code == 200:
soup = BeautifulSoup(response.text, 'lxml')
# 解析岗位信息的代码...
return parse_data(soup)
else:
print(f'请求失败,状态码:{response.status_code}')
return None
except Exception as e:
print(f'发生异常:{str(e)}')
return None
3.2 代理IP使用技巧(划重点!)
- 动态切换:每次请求更换不同IP
- 质量检测:先用代理访问httpbin.org/ip验证可用性
- 协议匹配:注意网站是HTTP还是HTTPS
推荐代理服务配置示例:
# 假设从代理服务商获取的IP列表
proxies = [
'123.45.67.89:8888',
'112.233.44.55:3128',
# 至少准备50个以上IP...
]
def get_proxy():
return random.choice(proxies)
四、突破反爬的骚操作(亲测有效)
4.1 随机延迟大法
# 在每次请求前加入随机等待
delay = random.uniform(1.5, 4.5)
time.sleep(delay)
4.2 应对验证码策略
if '验证码' in response.text:
print('触发验证码!启动备用方案...')
# 1. 更换代理IP
# 2. 更换User-Agent
# 3. 使用打码平台(需付费)
4.3 登录态保持(高阶技巧)
# 使用session保持cookies
session = requests.Session()
session.proxies = {'http': proxy, 'https': proxy}
response = session.get(url, headers=headers)
五、数据存储方案(三种段位任选)
青铜段位 - CSV文件
import csv
def save_to_csv(data):
with open('jobs.csv', 'a', newline='', encoding='utf-8') as f:
writer = csv.writer(f)
writer.writerow(['岗位名称', '公司名称', '薪资范围', '发布时间'])
黄金段位 - MySQL数据库
import pymysql
def save_to_mysql(data):
conn = pymysql.connect(host='localhost',
user='root',
password='123456',
database='jobs')
# 建表语句省略...
王者段位 - 定时增量爬取
# 使用APScheduler定时任务
from apscheduler.schedulers.blocking import BlockingScheduler
scheduler = BlockingScheduler()
@scheduler.scheduled_job('interval', hours=6)
def scheduled_job():
print('开始定时爬取...')
# 调用爬虫主函数
六、法律红线千万别碰!(重要提醒)
根据《网络安全法》和《数据安全法》:
- 不得爬取个人隐私信息(电话号码、身份证等)
- 遵守网站设置的爬虫规则(看robots.txt)
- 控制访问频率避免影响网站正常运营
- 数据使用需获得授权(特别是商业用途)
建议:爬取公开岗位信息(岗位名称、薪资范围等)是合法的,但要注意:
- 不要突破登录限制
- 不要绕过反爬机制
- 不要大规模复制网站内容
七、常见问题Q&A(你肯定遇到过)
Q:为什么用了代理还是被封?
A:检查:①代理IP质量 ②请求头是否完整 ③访问频率是否过高
Q:动态加载的数据怎么抓?
A:需要分析XHR请求,推荐使用Selenium或Pyppeteer
Q:数据抓不全怎么办?
A:尝试:①降低爬取速度 ②更换IP段 ③模拟不同设备访问
八、升级路线(从小白到专家)
- 入门:Requests + BeautifulSoup
- 进阶:Scrapy框架 + 分布式爬虫
- 高级:Selenium自动化 + 验证码识别
- 终极:自建代理池 + 机器学习反反爬
下次想听什么爬虫骚操作?留言告诉我!(比如:破解JS加密、自动过滑块验证、分布式爬虫架构…)