文章目录
一、为什么要用代理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)
)
"""
六、法律红线别碰!(重要警告)
- 爬取前必看网站的robots.txt文件
- 不得爬取用户隐私数据(手机号、邮箱等)
- 控制爬取速度避免影响网站正常服务
- 商业用途需获得网站授权
(去年某公司因违规爬取简历数据被罚200万的案例可不是开玩笑的!)
七、实战效果展示
这是我用这个脚本爬取的某招聘平台数据样例:
职位名称 | 公司名称 | 薪资 |
---|---|---|
Python开发工程师 | XX科技 | 15-25K·13薪 |
数据分析师 | YY集团 | 20-30K |
(完整数据已打码,大家自行测试时记得遵守平台规则)
八、常见问题解答
Q:为什么我的代理IP总是失效?
A:免费代理存活时间通常不超过1小时,建议使用付费服务或自建代理池
Q:网站改版后选择器失效怎么办?
A:用浏览器开发者工具重新分析DOM结构(F12大法好!)
Q:遇到验证码怎么破?
A:可以接入打码平台,但建议直接降低爬取频率(更合法)
最后说句掏心窝的话:爬虫虽好,可不要贪杯哦!合理使用技术才能走得更远~ 如果觉得本文有帮助,欢迎评论区交流你的实战心得!(求三连~)