写点什么

IPIDEA 的使用方式

  • 2023-02-11
    江西
  • 本文字数:3237 字

    阅读完需:约 11 分钟

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 rqimport 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 = 1for result in results:    if result == 'www.ipidea.net':        print(i)        break    i+=1if 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)        breakreturn
复制代码

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

# coding=utf-8# !/usr/bin/env pythonimport jsonimport threadingimport timeimport requests as rqimport 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() # breakprint('排名不在第一的ip',error)time.sleep(1)
复制代码

四、使用感受

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

发布于: 刚刚阅读数: 4
用户头像

关注公众号: 石臻臻的杂货铺 获取最新文章 2019-09-06 加入

进高质量滴滴技术交流群,只交流技术不闲聊 加 szzdzhp001 进群 20w字《Kafka运维与实战宝典》PDF下载请关注公众号:石臻臻的杂货铺

评论

发布
暂无评论
IPIDEA的使用方式_Python_石臻臻的杂货铺_InfoQ写作社区