Scrapy IP代理池

  如果爬虫爬取速度过快,很容易被反爬虫给禁掉IP,公司的网络,大部分的网络是一种动态分配的,对待这种情况 变化方案和设置IP代理,除了这点也要考虑网站门户的访问压力。

主要有效方案:
  1、设置IP代理池。

  2、adsl定时拨号()。
设置爬虫的 ip代理:

middlewares.py

from fake_useragent import UserAgent
class ArticlespiderMiddleware(object):
    def __init__(self,crawler):
        super(ArticlespiderMiddleware, self).__init__()
        self.ua = UserAgent()
        self.ua_type = crawler.settings.get('RANDOM_UA_TPYE','random')

    @classmethod
    def from_crawler(cls,crawler):
        '''在初始化是调用'''
        return cls(crawler)

    def process_requests(self,request,spider):

        def get_ua():
            return getattr(self.ua,self.ua_type)

        request.headers.setdefault('User-Agent',get_ua())
        request.meta["proxy"] = "http://ip:Port"

上边只是简单的在中间件中设置了一个IP代理,但是我们需要的不是一个,所以,可以通过免费的IP代理来设置创建我们的Ip代理池:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

__author__ = 'Fade Zhao'

import requests
from scrapy.selector import Selector
from fake_useragent import UserAgent
import MySQLdb



class GetHost(object):
    def __init__(self):
        self.conn = MySQLdb.connect(host='localhost', user='root', password='zhaoyinghan', db='fiction', charset='utf8')
        self.cursor = self.conn.cursor()
        self.headers = {}
    def insert_IP(self):
        for i in range(1, 11):
            url = 'http://www.xicidaili.com/nn/{0}'.format(i)
            agent = UserAgent().random
            self.headers = {
                'User-Agent': agent
            }
            session = requests.session()
            response = session.get(url=url, headers=self.headers)
            selector = Selector(text=response.text)

            all_trs = selector.css('#ip_list tr')
            ip_list = []
            for tr in all_trs[1:]:
                speed_str = tr.css(".bar::attr(title)").extract()[0]
                speed = 1
                if speed_str:
                    speed = float(speed_str.split('秒')[0])
                    if speed > 0.3:
                        continue
                td_text = tr.css("td::text").extract()
                ip = td_text[0]
                port = td_text[1]
                proxy_type = td_text[5]
                ip_list.append((ip, port, proxy_type, speed))
            print(ip_list)
            sql_str = '''INSERT INTO proxy_ip(ip,port,proxy_type,speed) 
                         VALUES(%s,%s,%s,%s) 
                         on duplicate 
                         key update port=values(port)'''
            try:
                self.cursor.executemany(sql_str, ip_list)
                self.conn.commit()
                print(i, '插完了')
            except Exception as e:
                print('插入错误', e)
                self.conn.rollback()
    def judge_ip(self,ip,port):
        '''判断ip是否可用'''
        http_url = 'https://www.baidu.com'
        proxy_url = 'http://{0}:{1}'.format(ip,port)
        try:
            proxy_dict = {
                "http":proxy_url
            }
            response = requests.get(http_url,proxies=proxy_dict,headers=self.headers)
        except Exception as e:
            print('invalid ip and port =',e)
            self.delete_ip(ip)
            return False
        else:
            code= response.status_code
            if code >= 200 and code < 300:
                print('成功代理')
                return True
            else:
                return False

    def delete_ip(self,ip):
        '''删除废弃host'''
        sql_str ='''delete from proxy_ip WHERE ip="{0}"'''.format(ip)
        self.cursor.execute(sql_str)
        self.conn.commit()

    def get_IP(self):
        sql_str = '''select ip,port from proxy_ip ORDER BY RAND() limit 1'''

        self.cursor.execute(sql_str)
        host = self.cursor.fetchone()
        ip = host[0]
        port = host[1]
        print(host)
        judge = self.judge_ip(ip,port)
        if judge:
            return "http://{0}:{0}".format(ip,port)
        else:
            self.get_IP()

middlewares.py

from ArticleSpider.utls.crawl_xiciIP import GetHost
class RandomProxyMiddleware(object):
    '''随机获取代理'''
    def process_requests(self,request,spider):
        host = GetHost()
        request.meta['proxy'] = host.get_IP()

以上就是IP代理池的设置和添加,但是我要说的是,GitHub上也已经有人给出了更多功能的IP代理吃的插件,正所谓是前任摘树,后人纳凉啊~

https://github.com/aivarsk/scrapy-proxies。

 

转载于:https://www.cnblogs.com/LetMe/articles/7933612.html

scrapy接入IP代理池(代码部分) &gt; 记录一个比较完整的通过ip池进行爬虫被禁的处理 class HttpProxymiddleware(object): # 一些异常情况汇总 EXCEPTIONS_TO_CHANGE = ( defer.TimeoutError, TimeoutError, ConnectionRefusedError, ConnectError, Connect... 阅读详情

相关推荐

Python-爬虫-爬取二手房数据-scrapy+IP代理池

按照上面的步骤,设置好scrapy就能顺利的获取到需要的数据了获取到的数据也会保存到Excel表中通过这次用scrapy获取二手房信息,使我深深感受到了scrapy的方便与快捷,它能帮我们省下一些功夫,不用把所有的注意力都花在写爬虫上,它还提供了许多可扩展的接口和插件,如中间件、管道等,方便用户根据需求进行自定义开发;scrapy采用异步IO的方法进行网络请求和数据处理,运行速度快且效率高。

cwx_1201的博客 2712

Scrapy ip代理池

一、概述 在众多的网站防爬措施中,有一种是根据ip的访问频率进行限制,即在某一时间段内,当某个ip的访问次数达到一定的阀值时,该ip就会被拉黑、在一段时间内禁止访问。 应对的方法有两种: 1. 降低爬虫的爬取频率,避免IP被限制访问,缺点显而易见:会大大降低爬取的效率。 2. 搭建一个IP代理池,使用不同的IP轮流进行爬取。 环境说明 操作系统:centos 7.6 ip地址:192.1...

shykevin的博客 9057

GAN实战:用Python和TensorFlow打造你的第一个生成对抗网络(附完整代码)

本文是一份详细的GAN实战指南,指导读者使用Python和TensorFlow框架从零开始构建并训练一个生成对抗网络。文章涵盖了环境搭建、MNIST数据预处理、生成器与判别器模型构建、对抗性损失函数定义、训练循环编写以及关键的调试技巧,旨在帮助开发者通过动手实践深入理解GAN的核心原理与实现过程。

php55的博客 480

基于Scrapy的IP代理池搭建

目录 一、为什么要搭建爬虫代理池 二、搭建思路 三、搭建代理池 items.py kuai_proxy.py middlewares.py pipelines.py settings.py utils.py 一、为什么要搭建爬虫代理池 在众多的网站防爬措施中,有一种是根据ip的访问频率进行限制,即在某一时间段内,当某个ip的访问次数达到一定的阀值时,该ip就会被拉黑、在一段时...

pengjunlee的博客 5万+

【OpenCV】背景替换(opencv、python),照片、证件照的背景替换(抠图)

目录步骤:导入库1、读入将要抠图的图片2、create一个带颜色域的mask3、通过mask使得原图只显示汽车,即抠出所需要的部分4、将要替换掉的图像resize或裁剪到和上述图片一样的大小5、将该图片预留出将要重叠上的部分,即将mask部分改为(0,0,0)6、通过和运算使得两部分图片mask部分替换7、最后保存图片 步骤: 导入库 import matplotlib.pyplot as plt import matplotlib.image as mpimg import numpy as np imp

weixin_41729258的博客 4362

C语言实现TCP聊天室:Socket编程与并发模型实战解析

网络编程是构建分布式系统的核心技术,其核心在于理解进程间通信的底层机制。TCP/IP协议栈提供了可靠的字节流传输服务,通过Socket API这一抽象接口,开发者可以在应用层建立连接、收发数据。为了高效处理多个并发连接,服务器需要采用多线程或I/O复用模型,前者为每个连接创建独立线程,逻辑清晰但资源消耗大;后者通过select、poll或epoll等系统调用监控多个文件描述符,显著提升并发能力。这些技术是构建高性能网络服务(如即时通讯、在线游戏服务器)的基础。本文以C语言实现一个简洁的TCP聊天室为例,详细

weixin_32642109的博客 292

【Python_Scrapy学习笔记(十)】基于Scrapy框架的下载器中间件创建代理IP池

本文中介绍 如何基于 Scrapy 框架的下载器中间件创建代理IP池。

禾戊之昂的博客 1488

机器学习 -- 信用卡评分模型 -- 互联网金融风控

互联网金融主要分为资金类和资产类。资金类主要是理财产品,吸储,主要指标是用户转化、留存和复投,重在客户运营。资产类主要是贷款,包括消费金融和现金贷,小额贷款属于此类,主要目的是用户转化,还款和风险控制,信用卡评分模型就属于风险控制。 信用评分作用是对贷款申请人(信用卡申请人)做风险评估分值的方法。 信用卡评分是以大量数据的统计结果为基础,根据客户提供的资料和历史数据对客户的信用进行评估,评分卡模型...

XiaoMaEr66的博客 2420

scrapy怎么使用代理ip?详细步骤

使用代理IP是在Scrapy爬虫中实现反反爬虫的一种常见方法,可以有效地隐藏你的真实IP地址,防止被目标网站封锁。

1423

四旋翼滑模控制:从理论到Simulink实现

本文深入探讨了四旋翼滑模控制的理论与Simulink实现,对比了其相较于PID控制在抗干扰和鲁棒性方面的显著优势。文章详细介绍了从精确动力学建模、内外环滑模控制器设计到指令解算的完整流程,并分享了Simulink仿真搭建、参数调试及抗扰性能验证的实战经验,帮助工程师掌握在复杂环境下提升四旋翼稳定性的进阶技能。

weixin_29163581的博客 375

【OS】AUTOSAR OS系统调用产生Trap的过程详解

AUTOSAR OS系统调用产生Trap的过程详解

qq_36056498的博客 2440

爬虫-Scrapy (十) 搭建ip代理池

每一个爬虫工作者都应该有一个ip池,就像 一、找到一个ip代理提供商 提供ip代理的服务商很多,基本都会先提供些不稳定的免费ip,然后引导你消费,我们这次 二、抓取ip 三、过滤有效ip 四、入库 1、从代理网站(如:西刺代理、快代理、云代理、无忧代理)爬取代理IP; 2、验证代理IP的可用性(使用代理IP去请求指定URL,根据响应验证代理IP是否生效); 3、抓取 在《Python爬虫代理池搭建》一文中我们已经使用Python的 requests 模块简单实现了一个IP代理池搭建,但是爬取速度较慢。由于西

XiaoDao147258369的博客 3698

C#上位机实战:PLC与检测设备无缝对接,构建产品质量实时判定系统

本文分享了基于C#开发的汽车零部件质量检测系统实现经验。系统采用三层架构:设备层(PLC/视觉相机/三坐标)、通信层(OPC UA/SDK/串口)和应用层(数据采集/判定/存储)。重点解决了三大技术难点:1)通过OPC UA订阅模式将PLC通信延迟从500ms降至50ms;2)反编译厂商Demo破解视觉SDK对接难题;3)采用时间戳+产品ID实现多设备数据同步。系统上线后质检人员减少67%,误判率降至0.5%,数据追溯效率显著提升。文章强调工业场景下稳定性优先于技术复杂度,实用经验值得借鉴。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 799

Scrapy如何设置iP,并实现IP重用, IP代理池重用

版本锁的思想, 实现代理的复用

m0_73112380的博客 1285

【ComfyUI】【Nunchaku】【diffusers报错解决】秋叶整合包安装 Nunchaku 报错的解决方法

最近在折腾 AI 绘图时,我尝试在秋叶的 ComfyUI 整合包中安装 `ComfyUI-nunchaku` 插件(版本 0.3.3),结果启动后直接报错,提示无法从 `accelerate.utils.memory` 中导入 `clear_device_cache`,让我一度怀疑插件是否兼容。查阅了一堆 issue 和源码之后,总算找到了原因和解决方法。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1859

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

scrapy实现IP代理池

摘要:本文介绍了IP代理的基本概念及其在爬虫中的应用。主要内容包括:代理服务器的作用(转发请求、更换IP)、代理匿名度分类(透明/匿名/高匿)、代理类型(HTTP/HTTPS)。获取代理的方式有免费(如西祠代理)和付费(如智连代理),并详细说明了智连代理的购买和使用流程。文章还提供了从代理网站爬取IP的Python代码示例,以及如何将IP存入MySQL数据库并进行有效性验证的方法。最后介绍了如何在Scrapy框架中使用随机代理IP的中间件实现。

qq_53937936的博客 384

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

SCRAPY之动态设置user-agent和IP代理池

UA代理池和IP代理池 1. UA代理池 ​ UA代理池也称作user-agent代理池,目的是在http头部加入user-agent选项,模拟浏览器进行发包给服务器端,起到伪装作用。也是很重要的一种反爬策略之一。 ​ 大部分服务器在请求快了会首先检查User_Agent,而scrapy默认的浏览器头是scrapy1.1 我们需要开启并且修改成浏览器头,如:Mozilla/5...

爬山的小明 5206

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

pythonscrapy爬虫ip代理池_Scrapy 框架插件之 IP 代理池

图片来自 unsplash现在很多网站都是对单个 IP 地址有访问次数限制,如果你在短时间内访问过于频繁。该网站会封掉你 IP,让你在一段时间内无法正常该网站。突破反爬虫机制的一个重要举措就是代理 IP。拥有庞大稳定的 IP 代理,在爬虫工作中将起到重要的作用,但是从成本的角度来说,一般稳定的 IP 池都很贵。因此,我为 Scrapy 爬虫编写个免费 IP 代理池插件。1 特点该插件适用的程序是基...

weixin_39989973的博客 429

Scrapy爬虫框架使用IP代理池

一、手动更新IP池方法一:1.在settings配置文件中新增IP池:IPPOOL=[ {"ipaddr":"61.129.70.131:8080"}, {"ipaddr":"61.152.81.193:9100"}, {"ipaddr":"120.204.85.29:3128"}, {"ipaddr":"219.228.126.86:8123"},

Gooooa的博客 1万+

Python网络爬虫--Scrapy使用IP代理池

Python网络爬虫--Scrapy使用IP代理池  我为峰2014 关注 2018.01.14 20:31 字数 155 阅读 6968评论 4喜欢 8 自动更新IP池 写个自动获取IP的类proxies.py,执行一下把获取的IP保存到txt文件中去: 代码 # *-* coding:utf-8 *-* import requests from bs4 import Be...

weixin_38859557的博客 2862

Python爬虫——Scrapy中使用IP池和用户代理池

Python爬虫——Scrapy中使用IP池和用户代理池 本文使用的版本为Python3 settings.py中配置IP池和用户代理池 # IP池设置 IPPOOL = [ {"ipaddr": "101.236.21.22:8866"}, {"ipaddr": "101.126.18.101:8866"}, {"ipaddr": "118.31.220.3.

SmoMark的博客 1万+

代理ip池的实现原理_scrapy爬虫ip代理池

最近爬取某个网站的书籍信息,大概请求几百次之后网站就会出现302 跳转提示ip异常需要登录。于是就用挂代理换ip的方法。网上看了下,大部分都是从把从网上爬取到的代理ip写到txt里。然后scrapy 加载这个txt,然后随机获取一个ip爬取数据。这种方式有很多弊端:ip用完了,爬虫就停止了。每个ip用一次就换了,scrapy没多久就会停止。经过两天的研究,我终于写出了自己满意的代码。这个scrap...

weixin_39682301的博客 921

Python爬虫实战之:快代理搭建IP代理池(Scrapy进阶版)

目录前言项目背景前期准备讲解1:项目搭建讲解2:理解Scrapy框架讲解3:Python连接PostgresSQL讲解4:创建IP代理池数据库讲解5:编写代码逻辑讲解6:配置数据库信息讲解7:配置Scrapy日志log讲解8:启动爬虫项目演示项目代码GitHub地址后语 前言 你好,我是Dr.叶子,用心写最优美的博客,弹最好听的钢琴! 项目背景 之前写了篇简版的作为入门,链接: Python爬虫实战之:快代理搭建IP代理池(简版)。为了进一步提升自己的能力,整理了这篇Scrapy进阶版。 网上的一些

Dr.叶子的博客 1618

Scrapy自建ip代理池(一)

自建代理池的第一步就是要在网上爬取到大量可用的ip,这里推荐三个网站:云代理、西刺代理、快代理。下面是爬取的代码。 Spider文件 # -*- coding: utf-8 -*- from scrapy import Spider from scrapy import Request from ..items import YunItem class YunSpider(Spider):...

小白一直白 1125

Scrapy 框架插件之 IP 免费代理池

Photo from Unsplash现在很多网站都是对单个 IP 地址有访问次数限制,如果你在短时间内访问过于频繁。该网站会封掉你 IP,让你在一段时间内无法正常该网站...

极客猴的博客 240

爬虫工作量由小到大的思维转变---<第三十九章 Scrapy Redis 实现IP代理池管理的最佳实践>

RedisProxyMiddleware在Scrapy框架中实现了一个IP代理池的管理中间件。通过对代码进行解析,我们了解了它的初始化方法、参数设置、处理请求方法和获取全新代理IP的逻辑。RedisProxyMiddleware的设计目标是提供一个简单、可扩展和稳定的IP代理池解决方案,以满足分布式爬虫的需求。通过精确管理代理IP,并根据需要进行动态调整和切换,我们可以提高爬虫的稳定性和数据抓取效率。

晦涩难董先生 2012
上一篇: Scrapy通过Itemloader获取数据
下一篇: 协程+requests+MYSQL爬取盗墓笔记小说
babi8505
博客等级 码龄10年 0粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值