当前位置: 首页 > news >正文

IPIDEA的使用方式

文章目录

  • 一、平台介绍
      • 1.前言
      • 2.简单介绍
      • 3.适用场景
      • 4.特色功能
  • 二、获取代理ip池
      • 1.注册信息
      • 2.获取代理API
      • 3.获取代理信息并检测代理可用性
  • 三、代理爬取数据
      • 1.编写功能代码
      • 2.插入到代理代码
  • 四、使用感受

一、平台介绍

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代理平台的用心,主要是这种开箱即用的感觉真的极大的降低了学习成本,如果遇到不清楚不明白的问题在线客服也能极速相应,如果大家有一些项目有这些需求还是推荐大家进行尝试的,当然,我们还是要做一只文明的爬虫,只获取公开信息,不要爬取非法信息!

文末送书

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

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

在这里插入图片描述


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

最后

深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

小编已加密:aHR0cHM6Ly9kb2NzLnFxLmNvbS9kb2MvRFVrVm9aSGxQZUVsTlkwUnc==出于安全原因,我们把网站通过base64编码了,大家可以通过base64解码把网址获取下来。

相关文章:

  • 【机器学习笔记】【决策树】【回归树】
  • IDEA版Postman插件Restful Fast Request,细节到位,功能好用
  • jmeter-12-Jenkins持续集成测试一键式使用
  • 9月10日OpenCV学习笔记——Mask、彩色直方图、人脸检测
  • 【JavaWeb】一篇文章复习JDBC、DAO及相关实现类
  • java计算机毕业设计ssm 音乐播放交流论坛网站
  • GO开发环境配置
  • Docker-compose安装mysql
  • 字符函数和字符串函数(C语言)
  • zynq pl访问ps ddr
  • JavaEE初阶:HTML
  • IDEA中JDBC连接MYSQL数据库步骤超详细总结
  • docker 开启 nginx 容器
  • 109 使用Ajax传递请求本地数据库
  • 《算法系列》之设计
  • 【comparator, comparable】小总结
  • happypack两次报错的问题
  • jdbc就是这么简单
  • mongodb--安装和初步使用教程
  • mysql 5.6 原生Online DDL解析
  • pdf文件如何在线转换为jpg图片
  • PHP 的 SAPI 是个什么东西
  • scrapy学习之路4(itemloder的使用)
  • vue 个人积累(使用工具,组件)
  • 给新手的新浪微博 SDK 集成教程【一】
  • 力扣(LeetCode)21
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 入口文件开始,分析Vue源码实现
  • 设计模式 开闭原则
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 推荐一个React的管理后台框架
  • 我的面试准备过程--容器(更新中)
  • 线上 python http server profile 实践
  • 硬币翻转问题,区间操作
  • 选择阿里云数据库HBase版十大理由
  • ​你们这样子,耽误我的工作进度怎么办?
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • (C)一些题4
  • (ISPRS,2023)深度语义-视觉对齐用于zero-shot遥感图像场景分类
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • (多级缓存)多级缓存
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .NET 中 GetHashCode 的哈希值有多大概率会相同(哈希碰撞)
  • .NET连接数据库方式
  • ?php echo $logosrc[0];?,如何在一行中显示logo和标题?
  • @Data注解的作用
  • [AI]ChatGPT4 与 ChatGPT3.5 区别有多大
  • [BSGS算法]纯水斐波那契数列
  • [C#]winform部署yolov9的onnx模型
  • [C/C++] C/C++中数字与字符串之间的转换
  • [c]扫雷