Python爬虫实战:使用代理IP批量爬取招聘信息训练AI面试官(附完整源码)

文章目录

    • 一、需求分析:为什么要爬招聘信息?
    • 二、准备工作:这些工具你准备好了吗?
      • 2.1 核心武器库
      • 2.2 代理IP选择(超级重要!!!)
    • 三、代码实战:手把手教你写爬虫
      • 3.1 创建爬虫类
      • 3.2 解析页面数据
      • 3.3 数据存储
    • 四、进阶技巧:如何突破反爬?
      • 4.1 请求头随机生成
      • 4.2 智能延时设置
    • 五、数据应用:训练你的AI面试官
      • 5.1 数据清洗示例
      • 5.2 训练简单分类模型
    • 六、法律红线!这些事千万别做
    • 七、总结与源码获取

一、需求分析:为什么要爬招聘信息?

最近有个学弟找我吐槽:“哥!现在找工作要准备的面试题也太多了吧!不同公司不同岗位要求都不一样(哭)…” 我一看他电脑——好家伙!浏览器开了20多个招聘网站标签页,正在手工复制粘贴岗位要求!(手都点麻了也没收集完)

这就是咱们今天要解决的痛点!通过Python爬虫批量抓取招聘信息,不仅可以用来:

  1. 分析岗位需求趋势(比如今年Python岗位是不是都要会AI?)
  2. 训练智能面试助手(让AI模拟不同公司的面试官!)
  3. 制作岗位技能图谱(帮你规划学习路线)

二、准备工作:这些工具你准备好了吗?

2.1 核心武器库

# 必备库安装(记得先pip安装!)
import requests  # 网络请求扛把子
from bs4 import BeautifulSoup  # 解析HTML神器
import pandas as pd  # 数据处理专家
import random  # 随机数生成器
import time  # 控制节奏大师

2.2 代理IP选择(超级重要!!!)

这里推荐亮数据代理服务,三个理由:

  1. 全球5000万+住宅IP池(不怕被封!)
  2. 自动IP轮换功能(省心省力)
  3. 支持HTTPS/SOCKS5协议(兼容性好)

注册后获取的API长这样:

proxy = "username:[email protected]:10000"  # 替换成你的认证信息

三、代码实战:手把手教你写爬虫

3.1 创建爬虫类

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

3.2 解析页面数据

以某招聘网站为例,看如何提取关键信息:

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']
    }

3.3 数据存储

用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}")

四、进阶技巧:如何突破反爬?

4.1 请求头随机生成

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)}

4.2 智能延时设置

# 随机等待1-3秒,模拟人类操作
time.sleep(random.uniform(1, 3))  

# 每爬20页休息10秒
if page % 20 == 0:
    time.sleep(10)

五、数据应用:训练你的AI面试官

5.1 数据清洗示例

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

5.2 训练简单分类模型

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)))  # 输出:['人工智能']

六、法律红线!这些事千万别做

根据《网络安全法》第四十四条规定:

任何个人和组织不得从事入侵他人网络、干扰他人网络正常功能、窃取网络数据等危害网络安全的活动

爬虫合规三原则:

  1. 遵守robots.txt协议(比如某网站禁止爬取就不要硬来)
  2. 控制请求频率(别把人家服务器搞崩了)
  3. 不爬取敏感信息(联系方式、身份证号等)

七、总结与源码获取

本文完整源码已打包(包含代理配置示例、5个主流招聘网站的解析器),关注公众号【技术π】回复"招聘爬虫"获取。建议大家在法律允许范围内进行技术实践,合理使用爬虫技术可以:

  • 提升数据分析能力
  • 辅助职业发展规划
  • 开发创新应用场景

遇到问题欢迎在评论区留言交流!下期预告:《用爬虫数据打造智能简历优化器》敬请期待~

你可能感兴趣的:(python,爬虫,人工智能,其他)