最近有个学弟找我吐槽:“哥!现在找工作要准备的面试题也太多了吧!不同公司不同岗位要求都不一样(哭)…” 我一看他电脑——好家伙!浏览器开了20多个招聘网站标签页,正在手工复制粘贴岗位要求!(手都点麻了也没收集完)
这就是咱们今天要解决的痛点!通过Python爬虫批量抓取招聘信息,不仅可以用来:
# 必备库安装(记得先pip安装!)
import requests # 网络请求扛把子
from bs4 import BeautifulSoup # 解析HTML神器
import pandas as pd # 数据处理专家
import random # 随机数生成器
import time # 控制节奏大师
这里推荐亮数据代理服务,三个理由:
注册后获取的API长这样:
proxy = "username:[email protected]:10000" # 替换成你的认证信息
class JobSpider:
def __init__(self, proxy):
self.headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36...'
}
self.proxy = {"http": f"http://{proxy}", "https": f"http://{proxy}"}
def make_request(self, url):
try:
response = requests.get(url, headers=self.headers, proxies=self.proxy, timeout=10)
response.raise_for_status() # 自动检测HTTP错误
return response.text
except Exception as e:
print(f"请求失败: {str(e)}")
return None
以某招聘网站为例,看如何提取关键信息:
def parse_job_detail(self, html):
soup = BeautifulSoup(html, 'lxml')
job_title = soup.find('h1', class_='job-title').text.strip()
salary = soup.find('span', class_='salary').text
requirements = [li.text for li in soup.select('.requirement-list li')]
return {
'标题': job_title,
'薪资': salary,
'要求': '|'.join(requirements),
'发布时间': soup.find('time')['datetime']
}
用CSV保存最方便:
def save_to_csv(data, filename):
df = pd.DataFrame(data)
# 追加模式写入,避免覆盖之前的数据
df.to_csv(filename, mode='a', header=not os.path.exists(filename), index=False)
print(f"已保存{len(data)}条数据到{filename}")
def get_random_header():
user_agents = [
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36...',
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1...',
# 至少准备10个不同的UA
]
return {'User-Agent': random.choice(user_agents)}
# 随机等待1-3秒,模拟人类操作
time.sleep(random.uniform(1, 3))
# 每爬20页休息10秒
if page % 20 == 0:
time.sleep(10)
def clean_data(df):
# 去除重复项
df = df.drop_duplicates(subset=['标题'])
# 薪资单位统一(万元/月 → 数字)
df['薪资'] = df['薪资'].apply(lambda x: float(x.replace('万', '')) * 10 if '万' in x else float(x))
# 拆分要求字段
df['工作经验'] = df['要求'].str.extract(r'经验:(\d+年)')
return df
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.svm import SVC
# 把岗位要求转换为特征向量
tfidf = TfidfVectorizer(max_features=500)
X = tfidf.fit_transform(df['要求'])
# 假设我们已经标注了岗位类型标签
model = SVC()
model.fit(X, df['岗位类型'])
# 预测新岗位类型
new_job = ["需要精通Python和机器学习,有3年以上AI项目经验"]
print(model.predict(tfidf.transform(new_job))) # 输出:['人工智能']
根据《网络安全法》第四十四条规定:
任何个人和组织不得从事入侵他人网络、干扰他人网络正常功能、窃取网络数据等危害网络安全的活动
爬虫合规三原则:
本文完整源码已打包(包含代理配置示例、5个主流招聘网站的解析器),关注公众号【技术π】回复"招聘爬虫"获取。建议大家在法律允许范围内进行技术实践,合理使用爬虫技术可以:
遇到问题欢迎在评论区留言交流!下期预告:《用爬虫数据打造智能简历优化器》敬请期待~