IPIDEA的使用方式


一、平台介绍

1.前言

最近使用python写了一些爬虫程序,用来帮助我们实现数据统计和数据监控。但是发现有些网站加入了反爬机制,其中最主要的一种方式是当发现单个IP大量的访问请求的时候就会将对应的IP加入黑名单不响应(也就是我们常说的封IP)。这让我们的爬虫程序瞬间失去了功能。
后来,万能的群友给我推荐IP代理利用代理池来进行爬虫来进行规避,发现 Ipidea在线代理池 解决了这个问题。

2.简单介绍

请添加图片描述
Ipidea是一个IP代理平台,为全球用户提供优质大数据代理服务,目前拥有千万级真实住宅IP资源,包含超过220个国家和地区,日更新超过4000万,汇聚成代理服务池并提供API接入,支持http、https、socks5等多种协议类型,并且拥有API形式和账号密码多种使用方式,非常易于上手。

3.适用场景

其实代理Ip池的用处不只是规避掉爬虫的限制,我们一起看看其他应用面吧。

在这里插入图片描述

很多时候我们不想暴露我们的Ip或者希望有些时候我们的Ip被对方加入了一些限制名单或者我们想知道日常用户访问的真实样貌的时候都可以使用代理ip池。

4.特色功能

4.1全局动态住宅代理
动态代理覆盖全球240+国家地区,且均为真实的家庭住宅ip,这意味着请求的成功率更好,且数据的真实性更高。
4.2多种调用方式
支持api接口调用、账号密码调用以及插件代理,使我们的应用成本大大降低。
4.3定制使用时效
出口IP时效可以自己设置,或者每次进行更换,可以让我们使用更加灵活。
4.4高匿隧道
隧道中转,支持高并发,不同端口的出口为不同的ip,自动切换,让我们的信息更加安全。
4.5完善文档支持
对于不同语言都有对应的实例文档,方便我们快速上手。


二、获取代理ip池

接下来我们使用一个简单的例子来展示一下平台的使用方式:

1.注册信息

首先打开对应的官网,注册的话可以白嫖50M流量:
在这里插入图片描述

然后一注册会提醒你实名,因为提取链接需要实名,所以建议在这个地方就进行实名认证哦!
请添加图片描述

2.获取代理API

首先我们在实名之后的页面直接找到对应的位置即可进入相应的位置。
请添加图片描述
然后按照下图的设置过程记录下我们的提取链接
在这里插入图片描述

3.获取代理信息并检测代理可用性

这部分其实网站已经给我们做好了对应的demo,我们只需要进行下载并进行少量修改就可以了。
在这里插入图片描述

在VSCODE中演示了一下主要修改的地方,修改结束后我们就可以尝试运行了。
在这里插入图片描述

点击运行后看到终端的显示就是说明正常:
在这里插入图片描述

如果遇到非200的返回码说明有些问题,常见的问题是没有加入ip白名单,可以在个人中心加入哦,当然如果还有其他错误也可以去官网找客服解决,回答很专业。


三、代理爬取数据

其实我们观察整体函数,我们需要改动的部分就是请添加图片描述

1.编写功能代码

其中的proxies就是对应的代理信息,这部分我们不用动,我们只需要把while True内的内容换成我们自己想要获取的信息就可以了。以下是我模拟的Ipidea的SEO排名优化的例子:

import requests as rq
import re

res = rq.get('https://www.google.com.hk/search?q=Ipidea')
#获取排名
pattern = re.compile(r'div class="BNeawe UPmit AP7Wnd">(.*?)</div>', re.S)
results = pattern.findall(res.text)
i = 1
for result in results:
    if result == 'www.ipidea.net':
        print(i)
        break
    i+=1
if len(results) == 0 or (i != 1):
    print(-1)#不符合要求打印-1

这个其实就是核心代码,代码的核心功能就是查看ipidea的网站搜索排名是否处于第一个的位置。

2.插入到代理代码

我们稍微改造一点就可以将其加入到我们的代理ip测试工具中。其中我为了减少信息干扰,保存了所有的不符合要求的ip地址,然后最后打印出来。我们就可以利用ip获取到对应的位置信息来做相应的优化。

error = [] #收集排名不在第一ip用于优化
# 核心业务
def testPost(host, port):
    proxies = {
        'http': 'http://{}:{}'.format(host, port),
        'https': 'http://{}:{}'.format(host, port),
    }
    res = ""

    while True:
        try:
            res = rq.get('http://www.google.com.hk/search?q=Ipidea', proxies=proxies, timeout=5)
            pattern = re.compile(r'div class="BNeawe UPmit AP7Wnd">(.*?)</div>', re.S)
            results = pattern.findall(res.text)
            i = 1
            if(len(results) == 0):
                print(host,'访问失败')
            for result in results:
                if result == 'www.ipidea.net':
                    break
                i+=1
            if i != 1:
                error.append(host)
            break
        except Exception as e:
            print(e)
            break
    return

最后的整体代码(我去除了我的提取链接!):

# coding=utf-8
# !/usr/bin/env python
import json
import threading
import time
import requests as rq
import re

error = [] #收集排名不在第一ip用于优化
# 核心业务
def testPost(host, port):
    proxies = {
        'http': 'http://{}:{}'.format(host, port),
        'https': 'http://{}:{}'.format(host, port),
    }
    res = ""

    while True:
        try:
            res = rq.get('http://www.google.com.hk/search?q=Ipidea', proxies=proxies, timeout=5)
            pattern = re.compile(r'div class="BNeawe UPmit AP7Wnd">(.*?)</div>', re.S)
            results = pattern.findall(res.text)
            i = 1
            if(len(results) == 0):
                print(host,'访问失败')
            for result in results:
                if result == 'www.ipidea.net':
                    break
                i+=1
            if i != 1:
                error.append(host)
            break
        except Exception as e:
            print(e)
            break
    return


headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:85.0) Gecko/20100101 Firefox/85.0",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
    "Accept-Language": "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2",
    "Accept-Encoding": "gzip, deflate, br"
}

class ThreadFactory(threading.Thread):
    def __init__(self, host, port):
        threading.Thread.__init__(self)
        self.host = host
        self.port = port

    def run(self):
        testPost(self.host, self.port)


# 提取代理的链接  json类型的返回值
tiqu = '提取链接'

    # 每次提取10个,放入线程中
resp = rq.get(url=tiqu, timeout=5)
try:
    if resp.status_code == 200:
        dataBean = json.loads(resp.text)
    else:
        print("获取失败")
        time.sleep(1)
except ValueError:
    print("获取失败")
    time.sleep(1)
else:
    # 解析json数组
    print("code=", dataBean["Code"])
    code = dataBean["Code"]
    if code == 0:
        threads = []
        for proxy in dataBean["Data"]:
            threads.append(ThreadFactory(proxy["ip"], proxy["port"]))
        for t in threads:  # 开启线程
            t.start()
            time.sleep(0.01)
        for t in threads:  # 阻塞线程
            t.join()
    # break
print('排名不在第一的ip',error)
time.sleep(1)


四、使用感受

其实可以发现只需要改动核心代码的位置就可以完成我们想要的功能,还是非常方便使用的,并且本身给的示例代码就是多线程,我们可以通过调整ip数量调整并发数也是非常方便。
使用下来,可以感受到ipidea代理平台的用心,主要是这种开箱即用的感觉真的极大的降低了学习成本,如果遇到不清楚不明白的问题在线客服也能极速相应,如果大家有一些项目有这些需求还是推荐大家进行尝试的,当然,我们还是要做一只文明的爬虫,只获取公开信息,不要爬取非法信息!

文末送书

博主通过好友之后,会将大家拉到一个小群里面,凭运气抽奖

赠送书籍: 《数据结构和算法基础》

在这里插入图片描述


👇🏻 扫描 下方 关注公众号 参与每周福利👇🏻

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>