Python爬虫实战:利用代理IP获取招聘网站信息(手把手保姆级教程)

Python3.8

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

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

去年我用爬虫抓某招聘网站数据时(你懂的),连续被封了3个IP地址(哭唧唧)。后来发现:不使用代理IP的爬虫就像裸奔的勇士!!! 现在所有主流招聘平台都有这些防御机制:

  1. 同一IP高频访问 → 直接封禁(别问我怎么知道的)
  2. 请求头不规范 → 返回假数据(见过返回葫芦娃的神操作吗?)
  3. JavaScript渲染 → 传统爬虫直接懵逼(现在连招聘网站都上Vue了!)

(重点来了!)使用代理IP能让我们:

  • 突破访问频率限制 ✅
  • 隐藏真实IP地址 ✅
  • 获取地域性招聘数据 ✅

二、快速搭建代理IP池(白嫖/付费方案都有!)

2.1 免费代理哪里找?(适合新手试水)

推荐这几个免费代理网站(但不保证稳定性):

免费代理源 = [
    "www.zdaye.com",
    "www.kuaidaili.com/free/",
    "ip.jiangxianli.com/"
]

2.2 付费代理推荐(企业级项目必备)

我用过的靠谱服务商(自用非广告):

  1. 青果代理 - 按量付费模式(0.5元/GB起)
  2. 亮数据 - 全球住宅代理(适合跨境招聘数据)
  3. 站大爷 - 长效稳定套餐(适合7×24小时监控)

2.3 代理IP验证脚本(自检神器!)

import requests

def 验证代理(proxy):
    try:
        response = requests.get('http://httpbin.org/ip', 
                             proxies={'http': proxy, 'https': proxy},
                             timeout=5)
        print(f"有效代理 → {proxy} 真实IP → {response.json()['origin']}")
        return True
    except:
        print(f"无效代理 × {proxy}")
        return False

# 使用示例
验证代理("123.123.123.123:8888")  # 替换成你的代理

三、实战代码详解(以某联招聘为例)

3.1 环境准备(别在这一步翻车!)

安装必备库(记得用清华镜像源):

pip install requests beautifulsoup4 fake-useragent -i https://pypi.tuna.tsinghua.edu.cn/simple

3.2 爬虫核心代码(含详细注释)

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

# 加载代理池(这里用列表演示,真实项目建议存数据库)
代理池 = [
    "http://123.123.123.1:8888",
    "http://123.123.123.2:8888",
    # ...添加更多代理
]

def 获取招聘数据(关键词, 城市, 页码):
    ua = UserAgent()
    headers = {
        'User-Agent': ua.random,
        'Referer': 'https://www.zhaopin.com/'
    }
    
    # 随机选择代理(重要!)
    当前代理 = random.choice(代理池)
    proxies = {
        'http': 当前代理,
        'https': 当前代理
    }
    
    # 拼接请求URL(注意编码)
    url = f"https://sou.zhaopin.com/?jl={城市}&kw={关键词}&p={页码}"
    
    try:
        response = requests.get(url, headers=headers, proxies=proxies, timeout=10)
        response.encoding = 'utf-8'
        
        # 解析数据(XPath更高效,但BS4更易读)
        soup = BeautifulSoup(response.text, 'lxml')
        职位列表 = soup.find_all('div', class_='joblist-box')
        
        结果 = []
        for 职位 in 职位列表:
            公司 = 职位.find('a', class_='company-title').text.strip()
            薪资 = 职位.find('span', class_='salary').text
            经验 = 职位.find('li', class_='experience').text
            结果.append([公司, 薪资, 经验])
            
        return 结果
        
    except Exception as e:
        print(f"请求失败!代理可能失效 → {当前代理}")
        return None

# 保存数据到CSV(注意中文编码)
with open('招聘数据.csv', 'w', newline='', encoding='utf-8-sig') as f:
    writer = csv.writer(f)
    writer.writerow(["公司名称", "薪资范围", "经验要求"])
    
    forin range(1, 6):  # 爬取前5页
        数据 = 获取招聘数据("Python开发", "北京",)
        if 数据:
            writer.writerows(数据)
            print(f"第{}页数据抓取成功!")

四、高级反反爬策略(突破平台限制)

4.1 请求头随机生成(重要!)

from fake_useragent import UserAgent
import random

def 生成随机头():
    ua = UserAgent()
    return {
        'User-Agent': ua.random,
        'Accept-Language': f'zh-CN,zh;q=0.{random.randint(5,9)}',
        'Referer': random.choice([
            'https://www.baidu.com/',
            'https://www.google.com/',
            'https://www.sogou.com/'
        ])
    }

4.2 IP轮换策略(防止被封的核心)

推荐两种轮换模式:

  1. 按请求次数轮换:每3次请求换一个IP
  2. 按失败次数轮换:连续2次失败自动切换
class 智能代理池:
    def __init__(self):
        self.当前索引 = 0
        self.最大重试 = 2
        
    def 获取代理(self):
        if self.当前索引 >= len(代理池)-1:
            self.当前索引 = 0
        else:
            self.当前索引 +=1
        return 代理池[self.当前索引]

五、法律风险提示(血的教训!)

  1. 遵守网站的robots.txt协议(比如某联明确禁止爬虫)
  2. 控制请求频率(建议≥5秒/次)
  3. 不要绕过付费接口获取数据(可能构成不正当竞争)
  4. 个人学习 vs 商用目的(后者风险指数级上升)

(2023年最新案例)某公司因爬取招聘数据被判赔偿200万!建议:

  • 只采集公开可见数据
  • 设置合理的采集间隔
  • 在夜间低峰期采集

六、常见问题解答(填坑指南)

Q:为什么返回的都是404错误?
A:检查这三个地方:

  1. 代理是否失效 → 用验证脚本测试
  2. Cookies是否需要 → 某些网站需要登录状态
  3. 页面是否是JavaScript渲染 → 改用Selenium

Q:数据保存到数据库选哪种?
A:根据数据量选择:

  • 小规模 → SQLite
  • 企业级 → MySQL/MongoDB
  • 实时分析 → 直接写入Elasticsearch

Q:遇到验证码怎么办?
A:三种解决方案:

  1. 降低采集频率(治本)
  2. 使用打码平台(推荐图鉴)
  3. 机器学习识别(需要训练模型)

项目源码已上传GitHub(搜索"zhilian-spider-proxy"),需要的小伙伴自取~ 觉得有用记得Star⭐️!下期预告:《用Scrapy-Redis打造分布式招聘数据监控系统》!

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值