国外IP代理推荐:
IPIPGO|全球住宅代理IP(>>>点击注册免费测试<<<)
国内IP代理推荐:
天启|全国240+城市代理IP(>>>点击注册免费测试<<<)
Python requests抓JSON数据遇上IP被封?试试这样玩
老张最近遇到个头疼事儿——用requests抓某网站数据时,刚跑两分钟就收到403错误。这场景是不是特眼熟?别急着改代码,八成是目标网站把你的IP给封了。这时候就该祭出代理IP这个神器,特别是像ipipgo这种覆盖240+国家的住宅IP服务商,专治各种反爬机制。

给requests穿个隐身衣
先看段基础代码:
import requests url = 'HTTPs://API.example.com/data' proxies = { 'http': 'http://ipipgo_username:password@gateway.ipipgo.com:9020', 'https': 'http://ipipgo_username:password@gateway.ipipgo.com:9020' } response = requests.get(url, proxies=proxies, timeout=10) data = response.json()
这里重点在proxies参数配置。ipipgo的代理支持socks5/http/https全协议,动态住宅IP能模拟真实用户行为。注意把username和password换成自己在ipipgo控制台生成的鉴权信息,别直接复制粘贴哈!
JSON处理三大坑实录
1. 编码鬼打:明明拿到数据却报JSONDecodeError?试试先打印response.text确认编码:
print(response.text[:200]) 看前200字符有没有乱码 response.encoding = 'utf-8' 手动指定编码
2. 嵌套数据迷魂阵:遇到多层嵌套数据时,别急着写for循环。用jsonpath一步到位:
from jsonpath import jsonpath price = jsonpath(data, '$..products[?(@.id==1024)].price')
3. 速率控制生死线:就算用了ipipgo的动态IP,也要控制请求频率。建议配合time.sleep随机延时:
import random import time time.sleep(random.uniform(1,3)) 随机睡1-3秒
实战:抓全球天气数据
假设要采集不同地区的天气API,用ipipgo的9000万+住宅IP轮询最合适:
locations = ['us', 'jp', 'de']
for loc in locations:
with requests.Session() as s:
s.proxies = proxies
api_url = f'https://weather-api.com/{loc}'
resp = s.get(api_url)
处理非常规JSON结构
try:
temp = resp.json()['main']['temp']
except KeyError:
temp = resp.json().get('temperature', 'N/A')
这里用Session保持连接复用,搭配ipipgo的智能路由,实测请求成功率能提升70%以上。
QA急救包
Q:代理设置没错但连不上?
A:先检查ipipgo后台的IP授权白名单,再试试点对点测试:curl -x http://代理地址 测试网址
Q:返回的数据不是JSON怎么办?
A:先用response.status_code看状态码,再用response.headers['Content-Type']确认数据类型,可能是网站返回了错误页面
Q:需要高并发采集怎么办?
A:用异步请求库aiohttp+ipipgo的静态长效ip,记得控制并发数别把通道挤爆了
最后唠叨句,选代理服务商得看底层技术。像ipipgo这种用真实家庭宽带IP的,比机房IP更难被识别,特别是做长期数据监测的项目,能少踩很多坑。他们家的IP池每天自动更新,基本上不用担心IP失效的问题。
国外IP代理推荐:
IPIPGO|全球住宅代理IP(>>>点击注册免费测试<<<)
国内ip代理推荐:
天启|全国240+城市代理IP(>>>点击注册免费测试<<<)
















发表评论
发表评论: