文章目录
一、为什么要用代理IP?(生存法则)
做爬虫的兄弟都懂(懂的都懂),招聘网站的反爬机制比老坛酸菜还酸爽!你的真实IP一旦被发现,轻则封IP 24小时,重则直接账号拉黑(别问我怎么知道的)!!!
这里必须祭出我们的保命神器——代理IP!简单来说就是通过第三方服务器中转请求,让目标网站以为是不同用户在访问。举个栗子:你人在北京,但通过代理IP,网站看到的是上海、广州甚至海外的IP地址(完美隐身术get√)
二、实战装备清单(新手必看)
- Python环境:推荐3.8+版本(别用祖传2.7了喂)
- 请求库:requests(安装命令:
pip install requests
) - 解析库:BeautifulSoup4(安装命令:
pip install beautifulsoup4
) - 代理IP服务:这里以某云代理为例(自行替换成你的服务商)
- 目标网站:某勾网(案例演示,请勿恶意爬取)
三、代码实操六步走(附避坑指南)
步骤1:获取代理IP池
def get_proxy_pool():
# 这里需要替换成你的代理服务商API
api_url = "http://api.xdaili.cn/getProxy?spiderId=xxx"
response = requests.get(api_url)
return [ip.strip() for ip in response.text.split('\n') if ip]
(超级重要)一定要测试代理IP是否存活!推荐用ipinfo.io/ip
验证
步骤2:伪装请求头(反爬第一关)
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
'Referer': 'https://www.lagou.com/',
'Cookie': '你的登录cookie(非必须)'
}
小技巧:用浏览器开发者工具复制真实请求头更安全
步骤3:随机切换代理(核心代码)
import random
def get_random_proxy(proxy_pool):
proxy = random.choice(proxy_pool)
return {'http': f'http://{proxy}', 'https': f'https://{proxy}'}
步骤4:发送带重试机制的请求
def safe_request(url, headers, proxies, retry=3):
for _ in range(retry):
try:
response = requests.get(url, headers=headers, proxies=proxies, timeout=10)
if response.status_code == 200:
return response
except Exception as e:
print(f"请求失败:{e}")
continue
return None
(重点)设置超时时间!建议5-10秒,避免死等
步骤5:解析职位数据(XPath大法好)
from bs4 import BeautifulSoup
def parse_jobs(html):
soup = BeautifulSoup(html, 'lxml')
jobs = []
for item in soup.select('.position_link'):
title = item.select_one('h3').text.strip()
company = item.select_one('.company_name a').text
salary = item.select_one('.money').text
jobs.append({'title':title, 'company':company, 'salary':salary})
return jobs
(注意)网站改版时记得及时更新选择器!
步骤6:数据存储(CSV示例)
import csv
def save_to_csv(data, filename='jobs.csv'):
with open(filename, 'a', newline='', encoding='utf-8') as f:
writer = csv.DictWriter(f, fieldnames=['title','company','salary'])
writer.writerows(data)
四、高级技巧(老鸟必备)
- IP轮换策略:设置每N次请求更换IP(建议50-100次)
- 请求频率控制:随机延迟1-3秒,避免触发风控
- 验证码应对:接入打码平台或机器学习识别(成本警告!)
- 分布式爬虫:使用Scrapy-Redis搭建集群(进阶玩法)
五、法律红线(必看!必看!必看!)
- 遵守robots.txt协议(在网站域名后加/robots.txt查看)
- 不爬取个人隐私信息(手机号、邮箱等)
- 控制爬取速度(别把人家服务器搞崩了)
- 参考《网络安全法》第二十七条相关规定
六、常见翻车现场(血泪教训)
- 案例1:没验证代理IP有效性→连续10次请求失败→账号被封
- 案例2:请求头太假→被识别为爬虫→返回假数据
- 案例3:高频访问→触发IP限制→整个IP段被拉黑
- 案例4:解析规则写错→爬取到乱码数据→白忙活
七、完整代码示例(仅供参考)
import requests
import random
from bs4 import BeautifulSoup
import csv
import time
# 初始化配置
PROXY_API = '你的代理API地址'
TARGET_URL = 'https://www.lagou.com/zhaopin/Python/'
def main():
proxy_pool = get_proxy_pool()
headers = {你的请求头}
for page in range(1, 11): # 爬取前10页
url = f'{TARGET_URL}{page}/'
proxy = get_random_proxy(proxy_pool)
response = safe_request(url, headers, proxy)
if response:
jobs = parse_jobs(response.text)
save_to_csv(jobs)
print(f'第{page}页抓取完成,共{len(jobs)}条数据')
time.sleep(random.uniform(1, 3))
if __name__ == '__main__':
main()
八、最后说两句
爬虫就像一场攻防战(刺激!),既要技术过硬,又要遵纪守法。建议新手:
- 先从小数据量练手
- 善用网站提供的公开API
- 及时处理异常情况
- 重要数据做好本地缓存
(彩蛋)遇到难搞的反爬怎么办?试试这些组合技:
- 代理IP + 请求头随机 + 浏览器指纹模拟
- Selenium自动化操作(适合动态加载)
- 分布式爬虫 + 智能调度系统(企业级方案)