文章目录
一、为什么要用代理IP爬招聘网站?
最近有个学员跟我吐槽:“老师!我用Python爬XX招聘,结果才爬了10页IP就被封了!”(是不是很多小伙伴都遇到过这种情况?)其实这就是网站反爬虫机制在作祟——它们会通过IP访问频率识别爬虫行为。
这时候就需要代理IP来拯救世界了!通过轮换不同IP地址,我们可以:
- 规避访问频率限制 ✅
- 突破地域性内容封锁 🌍
- 保护真实服务器地址 🔒
- 提高数据采集效率 ⚡
二、准备工作(超重要!!!)
2.1 安装必备库
pip install requests beautifulsoup4 fake-useragent
2.2 获取代理IP
这里推荐两种方式:
- 免费渠道:西刺代理、快代理等(适合小规模测试)
- 付费服务:Luminati、Oxylabs等(企业级项目必选)
💡 个人经验:免费IP存活时间通常不超过5分钟,正式项目建议用付费API!
三、实战代码教学
3.1 基础爬虫框架
import requests from bs4 import BeautifulSoup from fake_useragent import UserAgent # 随机生成浏览器标识 ua = UserAgent() headers = {'User-Agent': ua.random} def get_jobs(url, proxy=None): try: response = requests.get( url, headers=headers, proxies=proxy, timeout=10 ) if response.status_code == 200: return parse_html(response.text) else: print(f'请求失败,状态码:{response.status_code}') except Exception as e: print(f'发生异常:{str(e)}') def parse_html(html): soup = BeautifulSoup(html, 'lxml') jobs = [] # 这里以某招聘网站结构为例 for item in soup.select('.job-list li'): title = item.select_one('.job-title').text.strip() company = item.select_one('.company-name').text.strip() salary = item.select_one('.salary').text.strip() jobs.append({ 'title': title, 'company': company, 'salary': salary }) return jobs if __name__ == '__main__': base_url = 'https://www.xxx.com/jobs?page=' for page in range(1, 11): url = base_url + str(page) print(f'正在爬取第{page}页...') print(get_jobs(url))
3.2 加入代理IP池
# 代理IP池示例 proxies_pool = [ {'http': 'http://12.34.56.78:8080'}, {'http': 'http://23.45.67.89:3128'}, # 更多代理... ] current_proxy = 0 def rotate_proxy(): global current_proxy proxy = proxies_pool[current_proxy] current_proxy = (current_proxy + 1) % len(proxies_pool) return proxy # 修改get_jobs调用方式 jobs = get_jobs(url, proxy=rotate_proxy())
四、突破反爬的6个技巧(亲测有效!)
-
随机延迟:在请求间添加0.5-3秒随机等待
import random import time time.sleep(random.uniform(0.5, 3))
-
多级页面爬取:不要只爬列表页,要进入详情页获取完整信息
-
验证码识别:接入第三方打码平台(比如图鉴)
-
分布式爬虫:使用Scrapy-Redis实现多机协作
-
指纹伪装:随机切换User-Agent、Cookies等参数
-
HTTPS加密:确保代理支持HTTPS协议
五、法律红线千万别碰!
根据《网络安全法》和《数据安全法》,以下行为绝对禁止:
- 爬取用户隐私数据(电话号码、身份证等)🚫
- 绕过网站robots协议强行抓取 🚫
- 将数据用于商业牟利未经授权 🚫
- 导致目标服务器瘫痪的暴力抓取 🚫
📢 重要提醒:本文所有代码仅用于学习交流,实际使用前请务必:
- 查看目标网站的robots.txt
- 联系网站获取合法授权
- 控制请求频率
六、常见问题Q&A
Q1:为什么返回的都是空数据?
A:大概率遇到以下情况:
- 页面结构发生变化 → 更新CSS选择器
- IP被彻底封禁 → 更换高质量代理
- 触发人机验证 → 添加Selenium模拟浏览器
Q2:如何处理动态加载的数据?
A:两种方案:
- 分析XHR接口(推荐!)
- 使用Selenium/Splash渲染页面
Q3:数据存储选什么数据库?
根据数据量选择:
- 小规模:SQLite/CSV
- 中大型:MySQL/PostgreSQL
- 海量数据:MongoDB/Elasticsearch
七、完整项目源码
获取方式:关注公众号【Python实战营】回复"招聘爬虫"获取完整可运行代码(包含异常处理、数据存储、配置文件等完整功能)
最后唠叨一句:爬虫工程师的终极修养不是技术多强,而是知道哪些数据能爬、哪些不能爬。技术是把双刃剑,希望各位小伙伴都能在法律框架内合理使用爬虫技术!