Scrapy 爬取旅游景点相关数据(八)重用代理

news2025/3/14 11:11:01

本期学习:代理的使用与代理池的更新

1 代理IP提取

在Scrapy 爬取旅游景点相关数据(六)已经讲到了代理的使用,可以先学习这一期再来看本期内容,

第一步是代理IP提取,下面代码就是在中间件初始化的时候去更新代理池,后面这个2是一次更新的代理服务器的数量,可以看到,代理池是一个列表:

 class ProxyMiddleware:
    def __init__(self):
        self.proxies = []  #代理池
        self.user = '***'
        self.passw = '***'
        self.update_proxies()  #初始化的时候更新代理池
        self.logger = logging.getLogger(__name__)

    def update_proxies(self):
        self.proxies = get_proxy(self.user, 2)  #这个方法要根据你使用的代理服务自己定制

2 代理使用

使用方式很简单,就是在process_request里加到request.meta里面,注意到,这边先判断了代理池是否是空的,如果是空的,也会触发更新代理池的操作。

    def process_request(self, request, spider):
        if not self.proxies:
            self.update_proxies()
        proxy = random.choice(self.proxies)
        # print(f"目前使用的代理是:http://{proxy}")
        request.meta['proxy'] = f"http://{self.user}:{self.passw}@{proxy}"
        user_agent_list = [
           ....
        ]
        request.headers['User-Agent'] = random.choice(user_agent_list)

3 异常处理

代理服务器可能存在问题,比如生命期过了,或者被目标网站禁掉了,所以必须要增加异常处理机制,这边特别要说的是这个 TunnelError ,我使用的代理在服务器过期的情况下会抛这个异常,所以异常处理里面需要处理的异常要根据自己的实际情况来写写,下面代码只是给一个参考:

 # 如果请求过程中发生异常(如网络错误或连接错误),process_exception 方法被调用。
    def process_exception(self, request, exception, spider):
        self.logger.error(f'请求过程中发生异常{type(exception).__name__}' )
        if isinstance(exception, (MaxRetryError, ConnectionError, TunnelError,
                                  ConnectionRefusedError, ResponseNeverReceived)):
            self.logger.warning('出现连接异常,清除代理..')
            self.logger.warning(request.meta.get('proxy'))
            self.remove_proxy(request.meta.get('proxy'))
            return self.retry_request(request)
        return request
        
        
  # 是否要根据异常删除代理池中的代理,也请根据实际测试下来的结果加以修改
   def remove_proxy(self, proxy):
        ip_port = proxy.replace("http://", "")
        self.logger.warning(f'删除代理: {ip_port}')
        self.logger.info(self.proxies)
        self.proxies = [p for p in self.proxies if f"{p}" != ip_port]
        self.logger.info(self.proxies)
        
  # 重试
  def retry_request(self, request):
        if not self.proxies:
            self.update_proxies()
        proxy = random.choice(self.proxies)
        self.logger.info(f"重试,目前使用的代理是: http://{proxy}")
        self.logger.info(self.proxies)

        request.meta['proxy'] = f"http://{self.user}:{self.passw}@{proxy}"
        user_agent_list = [
            ...
        ]
        request.headers['User-Agent'] = random.choice(user_agent_list)

        return request

remove_proxy 会删除指定的代理地址

retry_request 会重发请求

4 测试

在这里插入图片描述

在这里插入图片描述

小结

开发爬虫是一个非常考验耐心和细心的工作,需要投入大量时间研究,如果对其他内容感兴趣可以去我的专栏,里面还有其他【项目实战】文章。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1969600.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据库之mysql初体验

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…

Nsight-Compute Global Load相关Metric测试

Nsight-Compute Global Load相关Metric测试 1.参考链接2.生成测试用例3.编译4.Profiling并将结果导出到csv文件5.截图 本文使用ptx指令直接从global memory获取数据,了解相关metrics及其计算过程 1.参考链接 PTX Cache OperatorsPTX LD指令Kernel Profiling Guide Caches 2.…

探秘LED显示屏背后的秘密:数字信号与数字电路的奇妙世界

走进繁华的都市,无论是闪烁的霓虹灯下,还是宏大的体育场馆内,LED显示屏以其绚丽的色彩和清晰的画面吸引着我们的目光。但你是否好奇,这些令人惊叹的显示效果背后,隐藏着怎样的科技奥秘?今天,就让…

数据结构初阶-复杂度

复杂度 🎈1.例题一🎈2.例题二 🎈1.例题一 数组nums包含从0到n的所有整数,但其中缺了一个,请编写代码找出那个缺失的整数。 ✅思路1:先冒泡排序,再遍历,当前值1,不等于下一…

Tomato靶机攻略

1、启动靶机 2、通过nmap -sA 192.168.168.0/24得到靶机IP 3、扫描目录 用dirb http://192.168.49.128扫描敏感目录 4、访问敏感目录 5、通过查看源码,发现其存在文件包含漏洞,利用该漏洞查看日志文件 http://192.168.168.131/antibot_image/antibots/…

腾讯云SDK发送短信

腾讯云接口发送短信 (1)创建签名 (2)创建模板 可以自定义模板参数例如:你好{1},这是一个短信 (3)确认套餐包 发送的额度 (4)创建应用 查看应用设置&#…

基于深度学习的植物疾病检测识别系统

温馨提示:文末有 CSDN 平台官方提供的学长 QQ 名片 :) 1. 项目简介 农作物病害不仅影响产量,还会导致严重的经济损失。传统的病害检测方法通常依赖人工专家进行目视检查,这种方法费时费力且容易受到主观因素的影响。近年来,深度学…

【Unity】3D功能开发入门系列(一)

Unity3D功能开发入门系列(一) 一、开发环境(一)安装 Unity(二)创建项目(三)Unity 窗口布局 二、场景与视图(一)场景(二)游戏物体&…

R语言统计分析——箱线图

参考资料:R语言实战【第2版】 箱线图(又称盒须图)通过绘制连续型变量的五数总括,即最小值、下四分位数(第25百分位数)、中位数(第50百分位数)、上四分位数(第75百分位数&…

Linux真实机器安装

引言 装机电脑:具有网卡硬件、磁盘空间 > 64G、内存空间 > 4G; 装机工具:rufus,u盘(8G); 装机系统:centos7.iso; 联网工具:路由器,网线 1.…

大学新生如何高效入门编程?全面指南来助力

引言 在当今数字化时代,编程已经成为一项必备技能。无论你未来从事什么职业,编程能力都能为你的职业生涯增添光彩。对于即将步入大学的新生来说,如何高效入门编程是一道关键课题。本文将从如何选择编程语言、制定学习计划、找到顶尖学习资源…

汇昌联信科技拼多多运营如何?

汇昌联信科技拼多多运营如何?在电商行业,拼多多的崛起无疑为许多企业带来了新的机遇。作为一家专注于电子商务解决方案的公司,汇昌联信科技在拼多多的运营方面展现出了不俗的实力。他们不仅成功帮助多个品牌入驻拼多多平台,还通过精细化运营…

缺口将达到1000万?人工智能(AI)专业就业前景分析

从年初以来,人工智能一直占据着热话题榜首。随着人工智能技术的不断发展和应用,人工智能(AI)专业已经成为了近年来大学校园里最热门的专业之一,成为连续四年新增最多专业。 今天给大家介绍一下,为感兴趣的…

申瓯通信在线录音管理系统Thinkphp远程代码执行漏洞

目录 1.产品简介 2.漏洞概述 3.搜索语法 4.漏洞复现 1.产品简介 申瓯通信在线录音管理系统是一款功能强大的录音管理解决方案,旨在满足公司、集团单位在区域分布下对录音数据的集中管理需求。该系统基于SOC1900、S0C1600等系列录音盒开发,是一个多线…

VMWare虚拟机共享主机的网络访问外网

1.主机中启动客户端并连接外网 2.设置虚拟网络类型为NAT 3.启动虚拟并通过主机访问外网

从“人巡”到“智控”:EasyCVR智能视频监控技术变革河道违建监测模式

一、背景分析 随着城市化进程的加快,河道作为城市生态系统的重要组成部分,其保护与管理日益受到重视。然而,非法侵占河道、违规建设等行为时有发生,不仅破坏了河道的自然生态,还严重威胁到防洪安全和水质安全。为了有…

Google发布三款开放式人工智能模型 重点关注安全问题

Google发布了三款新的、“开放的"人工智能生成模型,并称这些模型比大多数模型"更安全”、“更小巧”、“更透明”。它们是Google Gemma 2生成模型系列的新成员,该系列于今年 5 月首次亮相。这些新模型包括 Gemma 2 2B、ShieldGemma 和 Gemma S…

Xpath元素定位

Xpath元素定位 xpath初识元素失效的场景元素失效的原因语法书写如何进行校验 xpath实战元素定位分析流程书写(一)流程书写(二) xpath初识 元素失效的场景 元素失效的原因 元素缺少class和index的定位其中class和id的属性会改变元…

计算机网络-IGMP Snooping特性

一、以太网的组播转发问题 当组播数据从最后一跳路由器发往组播组成员时,往往会经过交换机。由于组播数据的目的MAC地址是组播MAC地址,默认情况下交换机将泛洪此类数据帧,有可能导致不同组的组播流量会被别组的成员接收。 当Router将组播报文…