Python爬虫实战:利用代理IP获取招聘网站信息(附源码)
·
文章目录
一、为什么要用代理IP?
最近帮朋友做招聘数据分析时发现(坑惨了!!!),直接爬某招聘网站每小时就被封IP。后来用了代理IP池,成功率直接飙升到98%(亲测有效)!这里分享我的踩坑经验,手把手教你搞定反爬机制。
温馨提示:本文案例仅用于技术交流,请遵守网站robots协议和相关法律法规
二、环境准备(小白必看)
# 基础环境
Python 3.8+
requests==2.26.0
fake_useragent==1.1.3
lxml==4.9.2
# 代理服务推荐(非广告)
青果代理 | 快代理 | 站大爷 # 选按时计费的更划算
安装命令一条龙(复制即用):
pip install requests fake_useragent lxml
三、爬虫核心四步走
3.1 网站结构分析(关键!!!)
打开Chrome开发者工具,发现:
- 数据接口:
https://www.zhipin.com/job_detail/ - 参数结构:
params = { "query": "Python", "city": "101010100", "page": 1, "ka": "page-next" } - 反爬特征:
- Cookie验证(特别是
__zp_stoken__) - 请求头校验
- IP频率限制(单个IP超过30次/分钟就凉凉)
- Cookie验证(特别是
3.2 请求头伪装技巧
from fake_useragent import UserAgent
headers = {
"User-Agent": UserAgent().random, # 随机生成浏览器标识
"Referer": "https://www.zhipin.com/",
"Cookie": "你的登录Cookie(重要!)"
}
小贴士:用无痕模式手动登录后复制Cookie,有效期约2小时(别偷懒!)
3.3 代理IP实战代码
import requests
def get_proxy():
# 这里以青果代理为例(实际换成你的接口)
res = requests.get("http://api.qingguo.com/getip?num=1&type=json")
return f"http://{res.json()['data'][0]['ip']}:{res.json()['data'][0]['port']}"
def crawl_jobs(keyword, max_page=10):
for page in range(1, max_page+1):
try:
proxies = {"http": get_proxy(), "https": get_proxy()}
response = requests.get(
url="https://www.zhipin.com/job_detail/",
params={"query": keyword, "page": page},
headers=headers,
proxies=proxies,
timeout=5
)
# 解析逻辑放在下一章详解
parse_html(response.text)
print(f"第{page}页抓取成功!")
except Exception as e:
print(f"第{page}页出错:{str(e)}")
continue
3.4 反反爬策略大全
- IP轮换池:建议准备至少50个高匿代理IP
- 请求间隔:随机休眠1-3秒(别用固定时间!)
import random, time time.sleep(random.uniform(1, 3)) - 验证码处理:
- 商业方案:打码平台(如超级鹰)
- 技术方案:OpenCV识别(成功率约60%)
四、数据解析进阶技巧
用XPath比BeautifulSoup快3倍(实测!):
from lxml import etree
def parse_html(html):
dom = etree.HTML(html)
jobs = dom.xpath('//div[@class="job-list"]/ul/li')
for job in jobs:
data = {
"title": job.xpath('.//h3/a/text()')[0].strip(),
"salary": job.xpath('.//span[@class="red"]/text()')[0],
"company": job.xpath('.//div[@class="company-text"]/h3/a/text()')[0]
# 其他字段自行扩展...
}
save_data(data)
五、数据存储方案对比
| 存储方式 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| CSV文件 | 简单易用 | 大数据查询慢 | 小规模数据 |
| MySQL | 支持复杂查询 | 需要维护数据库 | 结构化数据 |
| MongoDB | 灵活存储 | 学习成本高 | 非结构化数据 |
推荐使用pandas保存CSV:
import pandas as pd
def save_data(data):
df = pd.DataFrame([data])
df.to_csv("jobs.csv", mode="a", header=False, index=False)
六、完整源码获取
关注公众号回复"招聘爬虫"获取完整可运行代码(包含异常处理、分布式扩展等高级功能)
七、法律红线提醒(超级重要!!!)
- 遵守目标网站
robots.txt规则 - 控制请求频率(建议≤20次/分钟)
- 禁止抓取用户隐私数据
- 商业用途需获得授权
根据《网络安全法》第二十七条,非法获取数据可能面临3年以下有期徒刑或罚款!
八、常见问题QA
Q:为什么返回403错误?
A:检查这三个点:
- 请求头是否完整
- Cookie是否过期
- 代理IP是否失效
Q:如何提高爬取速度?
A:试试这两个方案:
- 使用aiohttp异步请求
- 搭建分布式爬虫(推荐Scrapy+Redis)
九、实战成果展示
抓取北京地区Python岗位数据(部分):
| 职位 | 薪资 | 公司 | 经验要求 |
|---|---|---|---|
| Python开发 | 25-35k | 字节跳动 | 3-5年 |
| 数据分析师 | 18-30k | 美团 | 1-3年 |
| 爬虫工程师 | 20-40k | 阿里巴巴 | 5-10年 |
十、总结提升
经过这次实战,你已掌握:
- 动态代理IP的应用
- 复杂反爬机制的应对
- 数据解析存储全流程
下次可以尝试:
- 对接自动登录模块
- 实现分布式爬虫架构
- 结合机器学习做岗位分析
记住:爬虫工程师的核心竞争力不是代码,而是解决问题的思维方式!
更多推荐
所有评论(0)