Python爬虫实战:利用代理IP获取招聘网站信息(附源码)

一、为什么要用代理IP?(重要指数★★★★★)

兄弟们!搞爬虫最怕啥?IP被封啊!(别问我怎么知道的…)尤其是招聘网站这种敏感数据源,你连续发几十个请求试试?分分钟给你上黑名单套餐!

举个栗子🌰:

  • 某联招聘:单IP每小时限制300次请求
  • 某BOSS直聘:动态验证码+行为检测
  • 某智联:请求头不全直接返回403

这时候就需要代理IP来拯救世界了!通过不同IP轮换访问,完美规避反爬机制。但是要注意(敲黑板):

  1. 必须使用高匿代理(别省这点钱)
  2. 要定期更换IP池(建议每次请求换IP)
  3. 注意请求间隔(至少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)

五、法律红线(必看!!!)

根据《数据安全法》和《个人信息保护法》:

  1. 不得抓取个人隐私信息(电话、邮箱等)
  2. 遵守网站的robots.txt协议
  3. 数据仅用于学习研究,禁止商用
  4. 单次抓取量控制在1000条以内

六、完整源码获取

关注后私信回复"招聘爬虫"获取带注释的完整版代码(包含IP检测模块和异常重试机制)


后记:最近帮朋友公司抓取竞品招聘数据时,发现某联的反爬升级到了人机验证,这时候就需要上更复杂的方案了(比如IP自动切换+浏览器指纹模拟)。有需要的朋友可以留言,下期咱们专门讲讲高阶反反爬技巧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值