当前位置: 首页 > news >正文

python爬虫ip封禁应对办法

目录

一、背景现象

二、准备工作

三、代码实现


一、背景现象

        最近在做爬虫项目时,爬取的网站,如果发送请求太频繁的话,对方网站会先是响应缓慢,最后是封禁一段时间。一直是拒绝连接,导致程序无法正常预期的爬取数据。针对这种情况,可以使用代理ip请求来规避,同时增加一些随机等待时间(如果性能要求不高)。

二、准备工作

        若要用代理ip去请求,那首先要有一个或多个代理ip。代理ip的获取可以寻找专门搜集提供代理ip的网站(如果有私人或公用的代理ip就更好了),直接使用即可。

        这里注意一般提供的代理ip会有匿名程度,有透明、普匿、高匿等。如果你使用了匿名程度为透明的ip去请求,那么代理ip方会看到你用人家的ip干了什么,就是说你的行为透明化对于代理ip提供方。相反高匿,你的行为不会对代理ip提供方公开。

三、代码实现

        基本思路就是使用代理ip进行请求,获取请求响应返回。使用request库,配置请求代理ip即可。

import requests
import random
from retrying import retry# 代理ip
proxy_list = ['http://ip:port','http://ip:port'
]reqSession = requests.Session()
# # 也可以直接设置全局
# reqSession.proxies = {
#     'http': 'http://121.37.195.205:80',
#     'https': 'http://121.37.195.205:80',
# }@retry(stop_max_attempt_number=10, wait_random_min=10000, wait_random_max=50000)
def get_detail_data(page_url):# 随机选取一个ip使用,避免一直使用一个ip,导致被封禁。one_proxy = random.choice(proxy_list)proxy = {'http': one_proxy,'https:': one_proxy}resPage = reqSession.get(page_url, headers=headers, proxies=proxy, timeout=100)if resPage.status_code != 200:raisereturn resPage.text

四、总结

        虽然现在可以解决ip封禁的问题,但是代码还是有一些隐形问题的。后续如果你使用的代理ip若失效了,但你不知道或没有及时更换的情况。解决办法是将代理ip存储到数据库,另外写一个爬虫程序去收集代理ip,更换数据库里的代理ip。业务爬虫程序读取数据库里的代理ip去进行请求。同时可以设置程序异常发送邮件,这样也可以及时定位问题。

相关文章:

  • 【大模型】实践之1:macOS一键部署本地大模型
  • Vitest3.0 现已发布!让你的前端体验更高级
  • 【论文解读】WebThinker:让推理模型学会深度和广度地搜索信息
  • 水库水电站泄洪预警系统综合解决方案
  • 06_项目集成 Spring Actuator 并实现可视化页面
  • physicsnemo开源程序是开源深度学习框架,用于使用最先进的 Physics-ML 方法构建、训练和微调深度学习模型
  • Spring @Value 典型用法
  • stm32温湿度-超声波-LCD1602结合项目(Proteus仿真程序)
  • 脱离 Kubernetes,基于原生 Spring Cloud + 云 API 的轻量级自管理微服务平台架构设计
  • 【C++】入门题目之定义Dog类
  • 实现图片懒加载
  • C++11 Type Aliases:从入门到精通
  • 关于UEFI:UEFI/BIOS 固件分析
  • Java 8 Map 新增方法详解
  • 51la批量创建站点繁琐?悟空统计一站式高效解决方案
  • HALCON第四讲->几何变换
  • C++中的RAII技术:资源获取即初始化
  • 【C++】ImGui:不足半兆的桌面程序
  • DWS层新增指标处理方案
  • Vue3+TypeScript实现访问者模式
  • 网上免费注册qq网站/网络公司网站模板
  • 学院评估 网站建设整改/seo公司怎么样
  • 毕业设计做企业门户网站/西安网站建设制作
  • 有做ppt的兼职网站吗/软文广告范例大全
  • 义乌网站制作/西安建站推广
  • 做网站需要的合同/独立站优化