文章目录
一、为什么要用代理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实战营】回复"招聘爬虫"获取完整可运行代码(包含异常处理、数据存储、配置文件等完整功能)
最后唠叨一句:爬虫工程师的终极修养不是技术多强,而是知道哪些数据能爬、哪些不能爬。技术是把双刃剑,希望各位小伙伴都能在法律框架内合理使用爬虫技术!