Python爬虫实战:利用代理IP获取招聘网站信息(手把手教你避开反爬!)

一、为什么要用代理IP?(血的教训!)

老铁们应该都遇到过这种情况吧?刚爬几十页数据突然就403了!(摔键盘)网站反爬机制现在越来越智能了,同一个IP频繁访问就会被识别成爬虫。这时候就需要代理IP来伪装我们的真实身份,就像打游戏开小号一样(你懂的~)

举个真实案例:我之前用本机IP爬某招聘网站,刚爬到第15页就喜提封禁大礼包。后来用了代理IP池之后,连续爬了500多页都稳如老狗!(亲测有效)

二、准备工作(装好这些就能起飞!)

1. 安装必备库

pip install requests beautifulsoup4 fake-useragent

(别问为什么用fake-useragent,用了之后请求头伪装度提升80%!)

2. 获取代理IP

推荐几个免费/付费渠道:

  • 青果代理(我用的是这个,稳定性不错)
  • 站大爷(免费版适合新手试水)
  • 快代理(按量付费比较灵活)

(当然你也可以自己搭建代理服务器,不过那又是另一个故事了…)

三、上代码!(保姆级注释)

import requests
from bs4 import BeautifulSoup
from fake_useragent import UserAgent
import random
import csv

# 加载代理IP池(格式:ip:port)
proxies = [
    "112.85.164.220:9999",
    "117.69.232.210:9999",
    # 这里填你获取的代理IP,建议至少准备20个
]

# 随机生成请求头
ua = UserAgent()

def get_job_data(keyword, page):
    url = f"https://www.zhipin.com/web/geek/job?query={keyword}&page={page}"
    
    # 随机选择代理IP
    proxy = random.choice(proxies).strip()
    proxies_dict = {
        "http": f"http://{proxy}",
        "https": f"https://{proxy}"
    }
    
    try:
        # 发送带伪装头的请求
        response = requests.get(
            url,
            headers={"User-Agent": ua.random},
            proxies=proxies_dict,
            timeout=10
        )
        
        # 状态码检测(重要!)
        if response.status_code == 200:
            soup = BeautifulSoup(response.text, 'html.parser')
            
            # 定位职位信息块(不同网站需要调整选择器)
            job_list = soup.select('div.job-list > ul > li')
            
            for job in job_list:
                # 提取关键信息
                title = job.select_one('span.job-name').text.strip()
                company = job.select_one('div.company-name').text.strip()
                salary = job.select_one('span.salary').text.strip()
                
                # 保存到CSV
                with open('jobs.csv', 'a', newline='', encoding='utf-8') as f:
                    writer = csv.writer(f)
                    writer.writerow([title, company, salary])
                    
            print(f"第{page}页数据获取成功!")
        else:
            print(f"请求失败,状态码:{response.status_code}")
            
    except Exception as e:
        print(f"代理IP {proxy} 失效,正在切换...")

四、核心技巧(避坑指南)

1. 代理IP有效性检测

一定要添加超时参数(timeout=10)!有些免费代理响应速度堪比树懒…(实测过等30秒还没响应的)

2. 动态切换UserAgent

每次请求使用不同的浏览器标识,可以搭配这个代码:

headers = {
    "User-Agent": ua.random,
    "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8"
}

3. 请求频率控制

即使用了代理也要控制节奏!建议每爬3-5页就随机sleep 2-5秒:

import time
time.sleep(random.uniform(2,5))

五、数据存储优化(进阶版)

推荐使用MySQL+CSV双备份:

import pymysql

# 数据库连接
conn = pymysql.connect(
    host='localhost',
    user='root',
    password='123456',
    database='jobs'
)

# 建表语句
create_table_sql = """
CREATE TABLE IF NOT EXISTS job_info (
    id INT AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(255),
    company VARCHAR(255),
    salary VARCHAR(50)
)
"""

六、法律红线别碰!(重要警告)

  1. 爬取前必看网站的robots.txt文件
  2. 不得爬取用户隐私数据(手机号、邮箱等)
  3. 控制爬取速度避免影响网站正常服务
  4. 商业用途需获得网站授权

(去年某公司因违规爬取简历数据被罚200万的案例可不是开玩笑的!)

七、实战效果展示

这是我用这个脚本爬取的某招聘平台数据样例:

职位名称公司名称薪资
Python开发工程师XX科技15-25K·13薪
数据分析师YY集团20-30K

(完整数据已打码,大家自行测试时记得遵守平台规则)

八、常见问题解答

Q:为什么我的代理IP总是失效?
A:免费代理存活时间通常不超过1小时,建议使用付费服务或自建代理池

Q:网站改版后选择器失效怎么办?
A:用浏览器开发者工具重新分析DOM结构(F12大法好!)

Q:遇到验证码怎么破?
A:可以接入打码平台,但建议直接降低爬取频率(更合法)


最后说句掏心窝的话:爬虫虽好,可不要贪杯哦!合理使用技术才能走得更远~ 如果觉得本文有帮助,欢迎评论区交流你的实战心得!(求三连~)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值