【Redis】孔夫子旧书网爬虫接入芝麻代理IP:代理IP利用效率最大化

news2024/11/19 23:35:56

背景:

之前用过芝麻IP,写过这几篇文章
《【Python】芝麻HTTP代理系列保姆级全套攻略(对接教程+自动领取每日IP+IP最优算法)》
《【Python】记录抓包分析自动领取芝麻HTTP每日免费IP(成品+教程)》
《爬虫增加代理池:使用稳定第三方芝麻代理IP 教程(详细可用)》
后面的项目都用他家的代理是因为,每天都有免费额度,不知不觉薅羊毛275天了,而且上次使用还不能生成代码,提交了建议后没想到真的实现了
在这里插入图片描述


目录:


设计思路:

在这里插入图片描述

用户通过小程序访问孔夫子的图书详情接口,访问前通过检查redis判断是否有代理IP,没有则生成并记录去redis,有则直接使用,因为接口使用不会存在长时间连接的情况,基本都是一次性访问,所以,本次方案行得通。

通过购买代理次数包,每次提取一个代理供接口调用使用,因为用户使用时段不一样,做到能最大限度节约成本,一个IP在有效时间内供多人使用,可以看下他们的价目表,开发可以先使用体验套餐

在这里插入图片描述

这里由于没有额度了,我先开通套餐
在这里插入图片描述


获取代理接口

1、通过配置参数获取接口
在这里插入图片描述

2、通过curl获得php访问代码

 // 初始化 cURL
        $ch = curl_init();
        
        // 设置 cURL 参数
        curl_setopt($ch, CURLOPT_URL, "http://**********s=");
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        
        // 发送请求并获取响应
        $response = curl_exec($ch);
        
        // 关闭 cURL
        curl_close($ch);

        $data = json_decode(trim($response),true);

3、通过访问观察下返回情况

有ip、端口、以及过期时间

{
	"code": 0,
	"data": [{
		"ip": "111.76.65.216",
		"port": 4278,
		"expire_time": "2023-06-16 16:46:05"
	}],
	"msg": "0",
	"success": true
}

在这里插入图片描述


封装IP检测模块

在控制器中,新建zhimahttp方法
在这里插入图片描述

如果redis没有该记录则重新获取IP,具体可以看流程图👇
在这里插入图片描述

过期时间换算

获取到过期时间后,通过计算现在与目标过期的时间,确定存储倒计时

 // 获取当前时间戳
    $now = time();
    
    // 将时间字符串转换为时间戳
    $target = strtotime($expireTime);
    
    // 计算时间差
    $diff = $target - $now;
    // 存入redis
    $redis->set($proxy_name,$proxyServer,$diff);

最后,完整封装代码如下:

 // 芝麻ip代理配置
       public function zhimahttp(){
      
        $proxy_name="proxy_ip";//定义存储名
        $redis = new Redis();
           //查询redis是否有记录
        $re= $redis->get("$proxy_name");
               if ($re) {
                   // 存在记录使用即可
                   return "$re";
                die();
               } else {
                   //不存在记录,从芝麻ip获取并存储
               // 初始化 cURL
        $ch = curl_init();
        
        // 设置 cURL 参数
        curl_setopt($ch, CURLOPT_URL, "htt**********ns=");
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        
        // 发送请求并获取响应
        $response = curl_exec($ch);
        
        // 关闭 cURL
        curl_close($ch);

        $data = json_decode(trim($response),true);
        // 判断code的值
if ($data['code'] == 0) {
    // 解析ip、port、expire_time
    $ip = $data['data'][0]['ip'];
    $port = $data['data'][0]['port'];
    $expireTime = $data['data'][0]['expire_time'];
    
    // 输出解析结果
    // echo "IP: $ip\n";
    // echo "Port: $port\n";
    // echo "expireTime: $expireTime\n";
    $proxyServer = 'http://' . $ip.':'.$port;
    // echo "$proxyServer";
    // 获取当前时间戳
    $now = time();
    
    // 将时间字符串转换为时间戳
    $target = strtotime($expireTime);
    
    // 计算时间差
    $diff = $target - $now;
    // 存入redis
    $redis->set($proxy_name,$proxyServer,$diff);
    return $proxyServer;
} else {
      // exit('ip 不正确');
      die(
        json_encode(
            array(
            'code' => 100,
            'data'=>'',
            'msg' => 'ip 不正确'
        ),480)
);
}
            
        
               }
        
        
    }

调用检测模块:

上面的代码中,我们已经在控制器中封装了方法,如何使用呢?

在tp5中调用方法即可,调用方法:

  //代理ip   
 $proxyServer =$this->zhimahttp();
 //代理ip   

结合我的业务代码,在访问接口前进行调用检查即可,接下来是一个示例:

 //调用代理ip检查   
 $proxyServer =$this->zhimahttp(); 
    
 $ch = curl_init();

curl_setopt($ch, CURLOPT_URL, 'https://app.kongfz.com/invokeSearch/app/product/productSearchV2');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_PROXY, $proxyServer);
$response = curl_exec($ch);

curl_close($ch);

注意:

curl_setopt($ch, CURLOPT_PROXY, $proxyServer);
记得在上面加上,不然代理ip没用上

接口测试

访问一次目标接口,由于第一次redis中没有记录,所以会存入名为proxy_ip的数据
在这里插入图片描述

再次访问(记录没有过期),由于记录存在所以就直接返回代理ip了,测试了下小程序接口可以正常使用

最后

喜欢爬虫类文章的可以订阅我专栏哦
⭐⭐欢迎订阅⭐⭐ ⭐⭐欢迎订阅⭐⭐
🚀Python爬虫项目实战系列文章!!
⭐⭐欢迎订阅⭐⭐ ⭐⭐欢迎订阅⭐⭐

🚀Python爬虫项目实战系列文章!!
⭐⭐往期文章⭐⭐

【Python爬虫项目实战一】获取Chatgpt3.5免费接口文末付代码(过Authorization认证)
【Python爬虫项目实战二】Chatgpt还原验证算法-解密某宝伪知网数据接口

⭐⭐往期文章⭐⭐

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/653641.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ICC2:自定义快捷键和菜单

把一些常用的功能放在一个菜单里是什么体验?直接放在工具栏里是不是更方便?那设置成快捷键呢? gui_create_menu 自定义菜单可以把工具常用的功能放到一个菜单里,用户也可以把“执行脚本操作”加到菜单里。 举例来说: 1)把Editor Toolbox放到Favorite菜单里,floorplan 操…

行业报告 | AIGC发展研究

原创 | 文 BFT机器人 01 技术篇 深度学习进化史:知识变轨 风起云涌 已发生的关键步骤: 人工神经网络的诞生 反向传播算法的提出 GPU的使用 大数据的出现 预训练和迁移学习 生成对抗网络 (GAN) 的发明 强化学习的成功应用 自然语言处理的突破 即将发生的关键…

MinGW-w64安装和使用_亲测有效

MinGW-w64 是什么!? MinGW-w64 是一个在 Windows 系统上运行的 GNU 编译器套件,支持 C 和 C 语言的编译。它包括了 GCC 编译器、GNU Binutils 和一些其他的工具。在 MinGW-w64 中 各个版本的参数含义如下: x86_64:表…

1.ORB-SLAM3系统概述

1.内容简介 本系列文章主要基于ORB-SLAM3代码、论文以及相关博客,对算法原理进行总结和梳理。 ORB-SLAM系列整体架构是不变的,都包含Tracking、LocalMapping和LoopClosing三个核心线程,中间伴随着优化过程。在ORB-SLAM3算法中比较突出的改进…

腾讯安全董志强:四大关键步骤促进数据安全治理闭环,提升企业免疫力

高速发展的数字时代,数据已成为推动产业发展的最重要生产要素之一,真正成为了创造经济财富的数字能源,守护数据资产的安全成为企业高质量发展不可回避的重要命题。 6月13日,腾讯安全联合IDC发布“数字安全免疫力”模型框架&#…

我被一家无货源电商培训公司骗了怎么办?

我是卢松松,点点上面的头像,欢迎关注我哦! 最近,一位被无货源电商培训骗的人找到了卢松松,她说: 老师,你好,我是被无货源电商课程骗了的受害人,走投无路了,想…

5个超好用的开源工具库分享~

在实际项目开发中,从稳定性和效率的角度考虑,重复造轮子是不被提倡的。但是,自己在学习过程中造轮子绝对是对自己百利而无一害的,造轮子是一种特别能够提高自己系统编程能力的手段。 今天分享几个我常用的开源工具库:…

大佬们都是如何编写测试方案的?

目录 1、背景 2、编写的方式 2.1 第一阶段:在需求评审开始前 2.2 第二阶段:在需求评审开始后,技术方案设计中 2.3 第三阶段:技术方案设计后 2.4 第四阶段:测试方案评审前 2.5 第五阶段:测试方案评审…

Opencv-C++笔记 (7) : opencv-文件操作XML和YMAL文件

文章目录 一、概述二、文件操作三、打开文件四、写入五、读写个人源码 一、概述 除了图像数据之外,有时程序中的尺寸较小的Mat类矩阵、字符串、数组等 数据也需要进行保存,这些数据通常保存成XML文件或者YAML文件。本小节中将介绍如何利用OpenCV 4中的函…

前端实现消息推送、即时通信、http简介

信息推送 服务端主动向客户端推送消息,使客户端能够即时接收到信息。 场景 页面接收到点赞,消息提醒聊天功能弹幕功能实时更新数据功能 实现即时通讯方式 短轮询 浏览器(客户端)每隔一段时间向服务器发送http请求,…

Google为TensorFlow设计的专用集成电路TPU3.0图片

Widrow也是在Minsky的影响下进入AI领域的,后来加入斯坦福大学任教。他在1960年提出了自适应线性单元(Adaline),一种和感知器类似的单层神经网络,用求导数方法来调整权重,所以说有“三十年神经网络经验”并不…

CI/CD 流水线 (FREE)

流水线是持续集成、交付和部署的顶级组件。 流水线包括: 工作,定义做什么。例如,编译或测试代码的作业。阶段,定义何时运行作业。例如,在编译代码的阶段之后运行测试的阶段。 作业由 runners 执行。如果有足够多的并…

Qt编写视频监控系统79-四种界面导航栏的设计

一、前言 最初视频监控系统按照二级菜单的设计思路,顶部标题栏一级菜单,左侧对应二级菜单,最初采用图片在上面,文字在下面的按钮方式展示,随着功能的增加,二级菜单越来越多,如果都是这个图文上…

openGauss数据库安装,配置连接 完整版Centos7

服务器版本:Centos7.6 || 7.9 数据库版本:openGauss-5.0.0-CentOS-64bit.tar.bz2 极简版 目录 修改系统参数安装环境安装openGauss数据库配置连接数据库使用navicat连接数据库 修改系统参数 ##修改 /etc/selinux/config 文件中的“SELINUX”值为“disa…

【网络安全】成功上岸深信服,这套面试题你肯定需要!!!

时间过得很快,回想起去年的这个时候,我也正在准备秋招,今天的我刚刚结束培训。 我的个人情况就读于某双非大学,信息与计算科学(大数据方向,校企合作,一个介于数学与计算机之间的专业&#xff0…

移动端H5使用window.open跳转,IOS不生效解决

移动端H5使用window.open跳转,IOS不生效解决 navigator navigator对象,用于提供当前浏览器及操作系统等信息,这些信息都放在navigator的各个属性中。navigator对象也是window对象的成员。 打印navigator对象 userAgent在安卓和IOS的打印结…

Opencv-C++笔记 (9) : opencv-多通道分离和合并

文章目录 一、概论二、多通道分离函数split()三、多通道合并函数merge()四、图像多通道分离与合并例程 一、概论 在图像颜色模型中不同的分量存放在不同的通道中,如果我们只需要颜色模型的某一个分量,例如只需要处理RGB图像中的红色通道,可以…

科技云报道:大模型时代,SaaS元年才真的到来了?

科技云报道原创。 ChatGPT席卷全球后,如果有人问AI大模型影响最大的会是哪个行业?SaaS领域肯定是不二之选。 目前全球各大科技公司已宣称要用大模型触及、整合所有产品。 其中,微软率先为其办公家族装配上了各类copilot,开发者…

Opencv-C++笔记 (10) : opencv-图像像素计算

文章目录 一、概率寻找图像像素的最大值和最小值计算图像的均值和标准方差 一、概率 我们可以将数字图像理解成一定尺寸的矩阵,矩阵中每个元素的大小表示了图像中每个像素的亮暗程度,因此统计矩阵中的最大值,就是寻找图像中灰度值最大的像素…

人机交互学习-7 可视化设计

可视化设计 窗口与菜单窗口窗口Window窗口界面类型 菜单注意事项 对话框模态对话框非模态对话框属性对话框功能对话框进度对话框公告对话框错误对话框消除错误信息 警告对话框确认对话框消除确认对话框 管理对话框内容标签对话框扩展对话框级联对话框 对话框设计原则 控件工具栏…