文章目录
(重要提示:本教程仅供学习交流使用!爬虫操作请遵守《数据安全法》和网站Robots协议!!!)
一、为什么需要代理IP?
做过爬虫的小伙伴都知道(说多了都是泪😭),招聘网站的反爬机制堪比钢铁长城!常见的反爬手段包括:
- IP封禁(最狠的杀招!)
- User-Agent检测(浏览器指纹识别)
- 访问频率限制(请求太快就凉凉)
- 验证码拦截(滑动拼图、点选汉字…)
这时候亮数据代理IP就是我们的救命稻草!它提供:
✅ 动态IP池(每次请求换不同IP)
✅ 地理位置伪装(北京、上海、广州随意切换)
✅ 高匿模式(深藏功与名)
二、实战准备(手把手教学)
1. 注册亮数据账号
访问[官网]注册(这里不放链接,你懂的),选择住宅代理套餐(企业级数据采集必备!)
2. 获取API密钥
登录后台 -> 我的账户 -> API集成 -> 生成新密钥(保存好这个密钥,就像保护你的游戏账号!)
3. 安装必备库(打开你的终端)
pip install requests pandas fake_useragent bs4
三、代码实战(含详细注释)
Step1:配置代理参数
# 代理配置(超级重要!!!)
proxy_config = {
"host": "你的代理服务器地址",
"port": "端口号",
"username": "用户名",
"password": "密码",
"session_duration": 600 # 会话保持时间(秒)
}
# 伪装成真实浏览器
headers = {
"User-Agent": fake_useragent.UserAgent().random,
"Accept-Language": "zh-CN,zh;q=0.9",
"Referer": "https://www.zhipin.com/"
}
Step2:编写爬虫核心函数
def fetch_job_data(keyword, page=1):
url = f"https://www.zhipin.com/web/geek/job?query={keyword}&page={page}"
# 代理设置(重点!)
proxies = {
"http": f"http://{proxy_config['username']}:{proxy_config['password']}@{proxy_config['host']}:{proxy_config['port']}",
"https": f"http://{proxy_config['username']}:{proxy_config['password']}@{proxy_config['host']}:{proxy_config['port']}"
}
try:
response = requests.get(url, headers=headers, proxies=proxies, timeout=10)
response.raise_for_status()
# 解析数据(这里用BeautifulSoup)
soup = BeautifulSoup(response.text, 'html.parser')
jobs = []
# 提取岗位信息(XPath定位技巧)
for item in soup.select('div.job-list > ul > li'):
title = item.select_one('div.job-name > a').text.strip()
salary = item.select_one('span.salary').text
company = item.select_one('div.company-name > a').text
jobs.append({
"职位": title,
"薪资": salary,
"公司": company,
"要求": item.select_one('div.job-area').text.strip()
})
return pd.DataFrame(jobs)
except Exception as e:
print(f"请求失败:{str(e)}")
return pd.DataFrame()
Step3:批量爬取(自动翻页)
def batch_crawler(keyword, max_page=10):
all_data = pd.DataFrame()
for page in range(1, max_page+1):
print(f"正在爬取第 {page} 页...")
df = fetch_job_data(keyword, page)
# 智能延时(避免触发频率限制)
time.sleep(random.uniform(1.5, 3.5))
# 自动停止机制
if df.empty:
print("没有更多数据了,停止爬取!")
break
all_data = pd.concat([all_data, df])
return all_data.reset_index(drop=True)
四、数据处理(让数据说话)
1. 数据清洗
# 去除重复项
df = df.drop_duplicates()
# 薪资解析(正则表达式大法)
df['最低薪资'] = df['薪资'].str.extract(r'(\d+)k-')
df['最高薪资'] = df['薪资'].str.extract(r'-(\d+)k')
2. 数据可视化(快速生成图表)
import matplotlib.pyplot as plt
# 薪资分布直方图
plt.figure(figsize=(10,6))
df['最高薪资'].astype(float).hist(bins=20)
plt.title('Python开发岗位薪资分布')
plt.xlabel('月薪(k)')
plt.ylabel('岗位数量')
plt.show()
五、训练面试AI智能体(实战进阶)
1. 构建知识库
from sklearn.feature_extraction.text import TfidfVectorizer
# 提取岗位要求关键词
vectorizer = TfidfVectorizer(stop_words=['掌握', '熟悉'])
X = vectorizer.fit_transform(df['要求'])
2. 智能问答系统
from sklearn.metrics.pairwise import cosine_similarity
def ai_interview(question):
# 将问题向量化
q_vec = vectorizer.transform([question])
# 计算相似度
similarities = cosine_similarity(q_vec, X)
# 返回最相关的岗位要求
best_match = df.iloc[similarities.argmax()]
return f"根据{best_match['公司']}的岗位要求:{best_match['要求']}"
六、避坑指南(血泪经验)
- 频率控制:单IP请求间隔建议>2秒(宁可慢不可断!)
- 验证码处理:集成第三方打码平台(预算不足的可用手动模式)
- 数据存储:使用MongoDB存储非结构化数据(比MySQL更灵活)
- 法律风险:每日爬取量控制在1000条以内(安全红线!)
七、法律须知(必看!!!)
根据《中华人民共和国网络安全法》第四十四条规定:
任何个人和组织不得非法获取、出售或者向他人提供个人信息
实操建议:
- 仅采集公开信息
- 不爬取用户个人信息
- 遵守网站robots.txt规则
- 设置合理的爬取频率
八、源码获取(懒人福利)
完整代码已上传GitHub(搜索"JobCrawlerWithProxy"),包含:
- 自动切换UserAgent模块
- 智能反反爬策略
- 数据持久化存储
- 简易GUI界面
(再次强调:本代码仅用于学习交流,禁止商业用途!)