最近帮朋友做招聘数据分析时(说多了都是泪),发现主流招聘平台的反爬机制简直丧心病狂!连续访问20次就会被封IP(亲测5分钟解封都是骗人的)…这时候就需要祭出我们的生存神器——代理IP!
举个栗子:假设你要批量爬取1000个岗位信息,不用代理IP的话,你的爬虫生涯可能在第21次请求时就Game Over了!
pip install requests beautifulsoup4 fake-useragent
(重要!)这里我用的是亮数据的住宅代理,配置参数长这样:
proxies = {
'http': 'http://用户名:密码@gateway.xxxx.com:端口',
'https': 'http://用户名:密码@gateway.xxxx.com:端口'
}
import requests
from bs4 import BeautifulSoup
from fake_useragent import UserAgent
# 伪装浏览器(反爬第一关)
headers = {
'User-Agent': UserAgent().random
}
# 代理配置(生存关键!)
proxies = {
'http': 'http://你的代理配置',
'https': 'http://你的代理配置'
}
def get_job_info(keyword):
try:
# 以某联招聘为例(其他平台自行替换URL)
url = f'https://www.zhaopin.com/{keyword}/'
# 发起带代理的请求(核心代码!)
response = requests.get(url, headers=headers, proxies=proxies, timeout=10)
# 状态码检测(别当瞎子!)
if response.status_code == 200:
soup = BeautifulSoup(response.text, 'lxml')
# 定位岗位信息(开发者工具大法好)
jobs = soup.select('.job-list li')
for job in jobs:
title = job.select_one('.job-title').text.strip()
company = job.select_one('.company-name').text.strip()
salary = job.select_one('.salary').text.strip()
print(f'岗位:{title}\n公司:{company}\n薪资:{salary}\n{"-"*30}')
else:
print(f'请求失败,状态码:{response.status_code}')
except Exception as e:
print(f'发生错误:{str(e)}')
if __name__ == '__main__':
get_job_info('python开发')
ProxyError
异常并重试from requests.exceptions import ProxyError
# 在try块中添加
except ProxyError:
print('代理连接失败,正在切换IP...')
# 这里调用更换代理的方法
import time
import random
# 在请求前添加
time.sleep(random.uniform(1, 3)) # 随机等待1-3秒
根据《数据安全法》第二十七条:
任何个人和组织都不得从事危害网络安全的活动!(超凶.jpg)
操作时务必:
把爬取的数据用于:
(悄悄说)我之前用这些数据做了个「Python岗位技能词云」,发现Django和Flask的出现频率比FastAPI高3倍!
记住代理IP爬虫的黄金三原则:
遇到问题欢迎评论区交流(但别问破解方法!),下期可能会分享如何用Scrapy搭建分布式爬虫系统~