Python网络爬虫进阶:自动切换HTTP代理IP的应用
前言
当你决定做一个网络爬虫的时候,就意味着你要面对一个很大的挑战——IP池和中间件。这两个东西听起来很大上,但其实就是为了让你的爬虫不被封杀了。下面我就来给你讲讲如何搞定这些东西。
第一步:创建爬虫IP池的详细过程
首先,你得有一批代理IP,这可不是随随便便就能搞到的。你可以花钱买,也可以去免费代理网站找,甚至还可以自己搭建代理。但是别忘了,这些IP得稳定、快速,并且得在不同的地方分布。
接下来,你要验证和筛选这些代理IP,不能用的得掉掉。你得发HTTP请求,看看响应状态码、响应时间,才能哪些IP可用,哪些慢如蜗牛、闲得发慌。
最后,你得把这些代理IP整合到你的爬虫里,这样每次请求换个IP,这样就成功被封了,也能提高爬取效率。这就需要写个中间件,让IP能动态切换,这样每次请求都使用不同的IP,降低被封的风险。
下面是一个简单的Python代码示例,演示了如何使用代理IP来发送HTTP请求。在这个示例中,我们使用了requests库来发送HTTP请求,并通过代理IP来访问目标网站。
import requests# 代理信息
proxyHost = "www.16yun.cn"
proxyPort = "5445"
proxyUser = "16QMSOML"
proxyPass = "280651"# 目标网站的URL
targetUrl = "http://example.com"# 构造代理地址
proxyMeta = "http://%(user)s:%(pass)s@%(host)s:%(port)s" % {"host": proxyHost,"port": proxyPort,"user": proxyUser,"pass": proxyPass,
}proxies = {"http": proxyMeta,"https": proxyMeta,
}# 发送带代理的HTTP请求
response = requests.get(targetUrl, proxies=proxies)# 输出响应内容
print(response.text)
第二步:编写中间件附带实现代码流程
中间件在网络爬虫中扮演关键的角色,它可以用于处理请求、响应和异常。在这一部分,我们将详细介绍如何编写中间件来实现IP切换、请求重试和处理等功能。我们将附带异常实现代码流程,方便读卡器能够了解中间件的编写和使用方法。
# 导入必要的库
import random
from scrapy import signals
from scrapy.downloadermiddlewares.retry import RetryMiddleware
from scrapy.exceptions import NotConfigured# 自定义的IP切换中间件
class CustomProxyMiddleware(object):def process_request(self, request, spider):# 在这里实现IP切换的逻辑,可以使用代理IP池中的IP来发送请求proxy = get_random_proxy() # 从代理IP池中随机选择一个IPrequest.meta['proxy'] = proxy# 自定义的请求重试中间件
class CustomRetryMiddleware(RetryMiddleware):def process_response(self, request, response, spider):# 在这里实现请求重试的逻辑,可以根据响应状态码进行判断是否需要重试if response.status in [500, 502, 503, 504]:reason = 'HTTP状态码错误:%s' % response.statusreturn self._retry(request, reason, spider) or responsereturn response# 自定义的异常处理中间件
class CustomExceptionMiddleware(object):@classmethoddef from_crawler(cls, crawler):if not crawler.settings.getbool('CUSTOM_EXCEPTION_ENABLED'):raise NotConfiguredreturn cls()def process_exception(self, request, exception, spider):# 在这里实现异常处理的逻辑,可以根据不同的异常类型进行处理if isinstance(exception, SomeSpecificException):# 处理特定的异常passreturn None# 注册中间件
def spider_opened(self, spider):spider.signals.connect(self.spider_opened, signal=signals.spider_opened)spider.signals.connect(self.spider_closed, signal=signals.spider_closed)
第三步:配置爬虫框架
在网络爬虫开发中,选择合适的爬虫框架需要考虑核心。不同的框架各自具有各自的特点和适用场景,因此在选择和配置框架时需要进行自由选择。
Scrapy是一个功能强大的Python爬虫框架,它具有高效的数据提取能力和灵活的扩展性,适用于大规模数据提取和重构数据提取。配置Scrapy框架通常涉及定义爬虫的起始URL、数据提取规则和存储方式,同时可以通过设置中间件实现IP切换和请求重试等功能。
另一个常用的爬虫框架是Beautiful Soup,它是一个优秀的HTML和XML解析库,适用于快速解析网页内容并提取所需数据。配置Beautiful Soup框架通常包括解析HTML结构、定位目标数据处理和异常情况等步骤。
对于JavaScript渲染的页面,Puppeteer是一个强大的爬虫框架选择。可以模拟浏览器行为,对动态生成的内容进行抓取和处理。配置Puppeteer框架通常包括模拟用户操作、等待页面加载完成和处理JavaScript渲染等操作。
在高效选择和配置爬虫框架时,需要根据具体的抓取需求和目标网站特点进行综合考量。合理选择和配置爬虫框架可以提高开发效率和抓取效果,帮助开发者上手并开发出稳定的网络爬虫。
第四步:运行爬虫最后
在网络爬虫开发的最后阶段,我们需要运行并监控我们开发的爬虫,并处理可能出现的问题。首先,我们应该确保爬虫的运行环境配置正确,包括所需的依赖库和环境变量。接着,我们可以通过日志系统监控爬虫的运行状态,及时发现并解决异常情况。在处理可能遇到的问题时,我们需要考虑网络请求超时、页面结构变化、反爬虫策略等情况,通过设置合理的重试机制和异常处理来提高爬虫的稳定性。另外,合理的并发控制和请求频率也是限制爬虫稳定运行的重要因素。总之,通过详细介绍爬虫运行的流程和常见问题的处理方法,我们可以更好地面保障爬虫的稳定运行和数据的准确聚焦。
相关文章:

Python网络爬虫进阶:自动切换HTTP代理IP的应用
前言 当你决定做一个网络爬虫的时候,就意味着你要面对一个很大的挑战——IP池和中间件。这两个东西听起来很大上,但其实就是为了让你的爬虫不被封杀了。下面我就来给你讲讲如何搞定这些东西。 第一步:创建爬虫IP池的详细过程 首先…...

vivado 使用IP Integrator源
使用IP Integrator源 在Vivado Design Suite中,您可以在RTL中添加和管理IP子系统块设计(.bd)项目或设计。使用Vivado IP集成程序,您可以创建IP子系统块设计。IP集成程序使您能够通过实例化和将Vivado IP目录中的多个IP核互连。可…...

【Mybatis系列】Mybatis空值关联
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

计算机组成原理 运输层
文章目录 运输层运输层协议概述进程之间的通信运输层的两个主要协议运输层的端口 用户数据报协议 UDPUDP 概述UDP 的首部格式 传输控制协议 TCP 概述TCP 最主要的特点TCP 的连接 可靠传输的工作原理停止等待协议连续 ARQ协议 TCP 报文段的首部格式TCP 可靠传输的实现以字节为单…...

shp文件与数据库(创建shp文件)
前言 前面把shp文件中的内容读取到数据库,接下来就把数据库中的表变成shp文件。 正文 简单的创建一个shp文件 暂时不读取数据库的表,先随机创建一个shp文件。既然是随机的,这就需要使用到faker这个第三方库,代码如下。 impor…...

106、Text-Image Conditioned Diffusion for Consistent Text-to-3D Generation
简介 很多工作在扩散先验中注入跨视图一致性,但仍然缺乏细粒度的视图一致性。论文提出的文本到3d的方法有效地减轻了漂浮物(由于密度过大)和完全空白空间(由于密度不足)的产生。 实现过程 简单而言,论文工作是 DreamfusionZero123。 使用两种不同的分数…...
MAC通过终端,使用python3建立本地Web服务
实现局域网Web服务,很简单几句命令,一起看看。 1. 我相信你已经有 brew(Homebrew 包管理器) 了对么? 如果没有可以执行这个方法 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"2. 安…...

闲鱼宝库亮相!闲鱼商品详情关键词搜索电商API接口助你畅享无尽好货!
随着互联网的快速发展,电商平台的崛起已经改变了人们的购物习惯。而在众多电商平台中,闲鱼作为一款社区二手交易平台,一直备受用户喜爱。如今,闲鱼宝库正式亮相,为用户带来了更加全面、详细的商品详情关键词搜索电商AP…...

后台生成随机验证码验证登录
web get请求获取图片 <div class"p2"><img id"imgId" src"/get/code"><a href"#">看不清,换一张</a> </div> 后台代码: /*获取动态验证码*/ ResponseBody RequestMapping(value "/…...
常见的HTTP接口超时问题出现原因及解决办法
HTTP接口超时问题是指在HTTP请求发送到服务器后,由于等待服务器响应的时间超过了预设的超时时间,导致请求被中断。以下是可能导致HTTP接口超时问题的原因和解决方法: 网络延迟或不稳定:网络延迟或不稳定可能导致请求在传输过程中…...
Pandas实战100例 | 案例 54: 日期时间运算
案例 54: 日期时间运算 知识点讲解 当处理带有 datetime 类型数据的 DataFrame 时,Pandas 提供了多种方法来提取和计算日期时间组件。这包括提取年份、月份、日期、星期几以及小时等。 提取日期时间组件: 使用 .dt 访问器,可以从 datetime 类型的列中…...

SDL2 连续帧图像显示
QT使用SDL多窗口显示视频(linux,ubuntu)_linux qt sdl-CSDN博客 QT使用SDL播放YUV视频 - C - QT C 使用SDL显示RGB图像数据_c sdl-CSDN博客 SDL库入门:掌握跨平台游戏开发和多媒体编程_sdl开发-CSDN博客 SDL教程零基础入门 简单…...

回归预测 | MATLAB实现SSA-CNN-GRU-Attention多变量回归预测(SE注意力机制)
回归预测 | MATLAB实现SSA-CNN-GRU-Attention多变量回归预测(SE注意力机制) 目录 回归预测 | MATLAB实现SSA-CNN-GRU-Attention多变量回归预测(SE注意力机制)预测效果基本描述程序设计参考资料 预测效果 基本描述 1.Matlab实现SSA…...

使用composer构建软件包时文件(夹)权限设置
在构建软件包的时候你可能会需要对包源内文件或文件夹的权限做出相应的调整,以确保软件包在部署到客户端后可以正常运行。在此之前我们先来了解一下Apple文件系统内文件或文件夹的权限设定。 常见的文件或文件夹会有Owner, Group, Everyone这三种类型的所有权&#…...

【C#】面向对象的三大特性,还记得吗,简单代码举例回顾
欢迎来到《小5讲堂》 大家好,我是全栈小5。 这是《C#》序列文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点的理解和掌握。…...
235.【2023年华为OD机试真题(C卷)】机器人搬砖(二分查找-JavaPythonC++JS实现)
🚀点击这里可直接跳转到本专栏,可查阅顶置最新的华为OD机试宝典~ 本专栏所有题目均包含优质解题思路,高质量解题代码(Java&Python&C++&JS分别实现),详细代码讲解,助你深入学习,深度掌握! 文章目录 一. 题目二.解题思路三.题解代码Python题解代码JAVA题解…...
git hooks
介绍 当我们在执行git管理仓库代码时,想规范下每个用户的commit内容?想检查下提交的代码规范?想检查下PR是否通过,那么这个时候就需要用到git hooks,git hooks可以在我们进行git操作的关键时机插入我们想要执行的“脚…...

法规更新美国玩具标准ASTM F963-17有更新,最新标准为ASTM F963-23
美国材料试验协会 (ASTM)在10月13日发布了新的玩具安全标准:ASTM F963-23,ASTM F963-17美国联邦法规16 CFR 1250还在使用当中,出口美国的玩具的厂商要引起重视。 ASTM F963-17是什么标准? ASTM F963-17是美国玩具检测标准&#…...

【grpc】利用protobuf实现java或kotlin调用python脚本,含实现过程和全部代码
前言 在一些特殊场景中,我们可能需要使用java或者其他任意语言调用python脚本或sdk等。本文的需求衍生也不例外于此,python端有sdk,但只能在python中调用,于是就有了本文章。 常见的调用方式如jython、python提供http rest接口、…...

Linux网络 ----- 网络文件共享服务之FTP服务
引言 FTP服务是Internet上最早应用于主机之间进行数据传输的基本服务之一。是目前Internet上使用最广泛的文件传送协议 一、FTP概述 FTP(File TransferProtocol,文件传输协议)是典型的C/S架构的应用层协议,需要由服务端软件、客户端软件两个部分共同实…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理
引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...

从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践
作者:吴岐诗,杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言:融合数据湖与数仓的创新之路 在数字金融时代,数据已成为金融机构的核心竞争力。杭银消费金…...

PHP 8.5 即将发布:管道操作符、强力调试
前不久,PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5!作为 PHP 语言的又一次重要迭代,PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是,借助强大的本地开发环境 ServBay&am…...
MFE(微前端) Module Federation:Webpack.config.js文件中每个属性的含义解释
以Module Federation 插件详为例,Webpack.config.js它可能的配置和含义如下: 前言 Module Federation 的Webpack.config.js核心配置包括: name filename(定义应用标识) remotes(引用远程模块࿰…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现指南针功能
指南针功能是许多位置服务应用的基础功能之一。下面我将详细介绍如何在HarmonyOS 5中使用DevEco Studio实现指南针功能。 1. 开发环境准备 确保已安装DevEco Studio 3.1或更高版本确保项目使用的是HarmonyOS 5.0 SDK在项目的module.json5中配置必要的权限 2. 权限配置 在mo…...
从零手写Java版本的LSM Tree (一):LSM Tree 概述
🔥 推荐一个高质量的Java LSM Tree开源项目! https://github.com/brianxiadong/java-lsm-tree java-lsm-tree 是一个从零实现的Log-Structured Merge Tree,专为高并发写入场景设计。 核心亮点: ⚡ 极致性能:写入速度超…...
FOPLP vs CoWoS
以下是 FOPLP(Fan-out panel-level packaging 扇出型面板级封装)与 CoWoS(Chip on Wafer on Substrate)两种先进封装技术的详细对比分析,涵盖技术原理、性能、成本、应用场景及市场趋势等维度: 一、技术原…...