文章目录
一、为什么要用代理IP?(核心知识点预警!)
兄弟们!今天咱们要聊一个爬虫界的保命技巧——代理IP的使用(敲黑板)。最近有学员问我:"为什么用自己电脑爬招聘网站,爬着爬着就404了?"答案很简单:你的真实IP被网站封了呗!
举个栗子🌰:某招聘网站每分钟最多允许同一IP访问50次。如果你用自己电脑疯狂请求,分分钟触发反爬机制(轻则限流,重则封IP)。这时候就需要代理IP来帮你:
- 隐藏真实IP地址(超级重要)
- 突破访问频率限制
- 绕过地域限制(比如某些岗位仅限特定地区查看)
二、代理IP哪里找?(免费/付费方案对比)
2.1 白嫖方案(适合新手试水)
- 西刺代理(http://www.xicidaili.com/)
- 快代理(https://www.kuaidaili.com/)
- GitHub搜索"free proxy"(会有惊喜)
但免费IP的坑也不少:
- 存活时间短(可能用半小时就失效)
- 响应速度慢(延迟500ms+是常态)
- 安全性未知(小心被中间人攻击)
2.2 氪金方案(企业级推荐)
- 青果代理(按量付费)
- 亮数据(BrightData)
- 芝麻代理(独享IP池)
(PS:这里不提供购买链接,自己搜官网哈~)
三、实战代码教学(手把手系列)
3.1 基础版爬虫(不含代理)
import requests
from bs4 import BeautifulSoup
def get_jobs():
url = 'https://www.liepin.com/zhaopin/'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
}
try:
response = requests.get(url, headers=headers, timeout=10)
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()
print(f"岗位:{title} | 公司:{company}")
except Exception as e:
print(f"请求失败:{str(e)}")
if __name__ == '__main__':
get_jobs()
3.2 代理版升级(重点看这里!)
import random
# 代理IP池(示例数据,实际需要动态获取)
PROXY_POOL = [
{'http': 'http://121.234.128.23:3128'},
{'http': 'http://112.85.131.124:9999'},
{'http': 'http://113.121.66.132:808'}
]
def get_with_proxy(url):
proxy = random.choice(PROXY_POOL)
try:
response = requests.get(
url,
proxies=proxy,
headers=headers,
timeout=5
)
if response.status_code == 200:
return response.text
else:
print(f"代理失效:{proxy} 状态码:{response.status_code}")
return None
except:
print(f"代理异常:{proxy}")
return None
# 使用示例
html = get_with_proxy('https://www.liepin.com/python')
四、反反爬策略大全(保命指南)
4.1 User-Agent伪装技巧
不要用默认的requests UA!这里推荐个骚操作:
from fake_useragent import UserAgent
ua = UserAgent()
headers = {
'User-Agent': ua.random # 每次随机生成
}
4.2 请求频率控制(核心!)
千万别用time.sleep(1)这种固定间隔!试试正态分布:
import random
import time
def random_delay():
delay = random.normalvariate(2, 0.5) # 均值2秒,标准差0.5
time.sleep(abs(delay))
4.3 验证码破解方案
- 简单数字验证码:使用Tesseract OCR
- 复杂滑块验证码:调用打码平台(如超人、图鉴)
- 极验验证码:考虑selenium模拟操作
五、数据存储方案(MySQL示例)
import pymysql
def save_to_mysql(data):
conn = pymysql.connect(
host='localhost',
user='root',
password='123456',
database='jobs'
)
try:
with conn.cursor() as cursor:
sql = """INSERT INTO job_info
(title, company, salary)
VALUES (%s, %s, %s)"""
cursor.execute(sql, data)
conn.commit()
finally:
conn.close()
六、法律红线预警(必看章节)
根据《网络安全法》第27条:
任何个人和组织不得从事非法侵入他人网络、干扰他人网络正常功能、窃取网络数据等危害网络安全的活动
划重点:
- 遵守网站的robots.txt协议
- 不要爬取个人隐私数据(如手机号、邮箱)
- 控制爬取频率(建议每秒不超过1次)
- 商业用途需获得授权
七、完整项目源码
(因篇幅限制,源码已上传GitHub,回复"代理爬虫"获取仓库地址)
八、常见问题Q&A
Q:代理IP总是连接超时怎么办?
A:建议使用付费代理+设置重试机制:
retry_times = 3
for _ in range(retry_times):
if get_with_proxy(url):
break
Q:爬到的数据怎么分析?
A:推荐pandas做数据分析,pyecharts做可视化:
import pandas as pd
df = pd.read_sql('SELECT * FROM job_info', conn)
print(df.describe()) # 薪资分布统计
下次想听哪方面内容?留言告诉我!下期预告:《如何用Scrapy-Redis搭建分布式爬虫》记得三连哦~