创建免费ip代理池

菜鸟阿都
• 阅读 2356

     反爬技术越来越成熟,为了爬取目标数据,必须对爬虫的请求进行伪装,骗过目标系统,目标系统通过判断请求的访问频次或请求参数将疑似爬虫的ip进行封禁,要求进行安全验证,通过python的第三方库faker可以随机生成header伪装请求头,并且减缓爬虫的爬取速度,能很好的避过多数目标系统的反扒机制,但对一些安全等级较高的系统,也有极大的可能ip被封禁,当ip被封禁后,通过更换代理ip便可以继续爬取,所以具有一个有效的ip代理池是非常重要的,网上有很多动态ip代理提供商,但如果能有一个自己免费的ip代理池也是不错的选择。关注微信公众号【菜鸟阿都】并回复:ip池,可获得源码。

ip代理池开发思路:

  1. 通过爬虫技术爬取互联网上免费的ip

  2. 通过校验,将有效的ip保存

免费ip代理商: |ip提供商|url| |-|-|-| |快代理|https://www.kuaidaili.com/free/inha| |89免费代理|https://www.89ip.cn/index_1.html| |高可用全球免费代理ip库|https://ip.jiangxianli.com/| |66代理|http://www.66ip.cn/2.html|

   将请求进行封装,当请求失败后,会停留3秒再次发起请求,总共请求3次,使用faker库,随机生成请求头

# get请求:链接异常后,会多次进行链接尝试
def GetConnect(url):
    i=0
    while i<3:
        try:
            headers= {'User-Agent':str(UserAgent().random)}
            response=requests.get(url,headers=headers,timeout=5)
            if(response.status_code==200):
                return response
        except requests.exceptions.RequestException as e:
            time.sleep(3)
            i+=1

     获取网页提供的ip,总共爬取上述5个提供商提供的免费ip,页面数据为表格,所以通过xpath定位表格爬取数据

def getDate():
    for i in range(0,len(urlNode)):
        for j in range(1,10):n
            url=urlNode[i].replace('@',str(j))
            print(url)
            response=GetConnect(url)
            content=response.text
            html=etree.HTML(content)
            tr=html.xpath('//tr')
            for j in range(1,len(tr)+1):
                ip=html.xpath('//tr['+str(j)+']/td[1]/text()')
                port=html.xpath('//tr['+str(j)+']/td[2]/text()')
                ipType=html.xpath('//tr['+str(j)+']/td[4]/text()')
                # 66ip第一行为表头
                if len(ip)>1:
                    continue
                if len(ipType)==0 or not ipType[0].isalpha():
                    ipType='HTTP'
                else:
                    ipType=ipType[0]
                if len(ip)!=0 and len(port)!=0:
                    checkIp(wash(ip[0])+':'+wash(port[0]),wash(ipType))

通过ip代理请求,访问icanhazip网址校验ip的有效性

# 校验ip有效性
def checkIp(ip,ipType):
    url='http://icanhazip.com/'
    try:
        headers= {'User-Agent':str(UserAgent().random)}
        proxy = {
          ipType.lower():ipType.lower()+'://'+ip
        }
        response=requests.get(url,headers=headers,proxies=proxy,timeout=5)
        if(response.status_code==200):
            # 有效ip
            write(ip,ipType)
    except Exception as e:
        # 无效

将有效的ip写入文件,以供爬虫使用

def write(ip,ipType):
    with open("ip池.txt", "a", encoding="utf-8") as f:
        f.write(wash(ip)+' '+wash(ipType)+'\n')
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
菜鸟阿都 菜鸟阿都
3年前
玩转python爬虫
&ensp;&ensp;&ensp; 近几年来,python的热度一直特别火!大学期间,也进行了一番深入学习,毕业后也曾试图把python作为自己的职业方向,虽然没有如愿成为一名python工程师,但掌握了python,也让我现如今的工作开展和职业发展更加得心应手。这篇文章主要与大家分享一下自己在python爬虫方面的收获与见解。 &ensp;&ensp;
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
把帆帆喂饱 把帆帆喂饱
3年前
爬虫
爬虫什么是爬虫使用编程语言所编写的一个用于爬取web或app数据的应用程序怎么爬取数据1.找到要爬取的目标网站、发起请求2.分析URL是如何变化的和提取有用的URL3.提取有用的数据爬虫数据能随便爬取吗?遵守robots.txt协议爬虫的分类通用网络爬虫百度,Google等搜索引擎,从一些初识的URL扩展到整个网站,主要为门户站点搜索引擎和大型网站服务采
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Stella981 Stella981
3年前
Selenium使用代理出现弹窗验证如何处理
部分商业网站对爬虫程序限制较多,在数据采集的过程中对爬虫请求进行了多种验证,导致爬虫程序需要深入分析目标网站的反爬策略,定期更新和维护爬虫程序,增加了研发的时间和投入成本。这种情况下,使用无头浏览器例如Selenium,模拟用户的请求进行数据采集是更加方便快捷的方式。同时为了避免目标网站出现IP限制,配合爬虫代理,实现每次请求自动切换IP,能够保证长期稳定
爬虫代理IP是什么?为什么需要它?
爬虫代理IP是什么?为什么需要它?爬虫代理IP是指使用其他计算机的网络地址来访问目标网站的一种技术。它可以隐藏爬虫程序的真实IP地址,避免被网站识别和封禁12。在进行网络数据采集时,我们经常会遇到一些反爬措施,比如网站限制同一个IP地址的访问频率、次数或时
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
菜鸟阿都
菜鸟阿都
Lv1
男 · java程序员
不想脱发的菜鸟程序猿,微信公众号【菜鸟阿都】
文章
19
粉丝
2
获赞
9