背景:
之前用過(guò)芝麻IP
,寫(xiě)過(guò)這幾篇文章
《【Python】芝麻HTTP代理系列保姆級(jí)全套攻略(對(duì)接教程+自動(dòng)領(lǐng)取每日IP+IP最優(yōu)算法)》
《【Python】記錄抓包分析自動(dòng)領(lǐng)取芝麻HTTP每日免費(fèi)IP(成品+教程)》
《爬蟲(chóng)增加代理池:使用穩(wěn)定第三方芝麻代理IP 教程(詳細(xì)可用)》
后面的項(xiàng)目都用他家的代理是因?yàn)?,每天都有免費(fèi)額度,不知不覺(jué)薅羊毛275天
了,而且上次使用還不能生成代碼,提交了建議后沒(méi)想到真的實(shí)現(xiàn)了
目錄:
設(shè)計(jì)思路:
用戶(hù)通過(guò)小程序訪問(wèn)孔夫子的圖書(shū)詳情接口,訪問(wèn)前通過(guò)檢查redis判斷是否有代理IP,沒(méi)有則生成并記錄去redis,有則直接使用,因?yàn)榻涌谑褂貌粫?huì)存在長(zhǎng)時(shí)間連接的情況,基本都是一次性訪問(wèn),所以,本次方案行得通。
通過(guò)購(gòu)買(mǎi)代理次數(shù)包,每次提取一個(gè)代理供接口調(diào)用使用,因?yàn)橛脩?hù)使用時(shí)段不一樣,做到能最大限度節(jié)約成本,一個(gè)IP在有效時(shí)間內(nèi)供多人使用,可以看下他們的價(jià)目表,開(kāi)發(fā)可以先使用體驗(yàn)套餐
這里由于沒(méi)有額度了,我先開(kāi)通套餐
獲取代理接口
1、通過(guò)配置參數(shù)獲取接口
2、通過(guò)curl獲得php訪問(wèn)代碼
// 初始化 cURL
$ch = curl_init();
// 設(shè)置 cURL 參數(shù)
curl_setopt($ch, CURLOPT_URL, "http://**********s=");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// 發(fā)送請(qǐng)求并獲取響應(yīng)
$response = curl_exec($ch);
// 關(guān)閉 cURL
curl_close($ch);
$data = json_decode(trim($response),true);
3、通過(guò)訪問(wèn)觀察下返回情況
有ip、端口、以及過(guò)期時(shí)間
{
"code": 0,
"data": [{
"ip": "111.76.65.216",
"port": 4278,
"expire_time": "2023-06-16 16:46:05"
}],
"msg": "0",
"success": true
}
封裝IP檢測(cè)模塊
在控制器中,新建zhimahttp方法
如果redis沒(méi)有該記錄則重新獲取IP,具體可以看流程圖??
過(guò)期時(shí)間換算
獲取到過(guò)期時(shí)間后,通過(guò)計(jì)算現(xiàn)在與目標(biāo)過(guò)期的時(shí)間,確定存儲(chǔ)倒計(jì)時(shí)
// 獲取當(dāng)前時(shí)間戳
$now = time();
// 將時(shí)間字符串轉(zhuǎn)換為時(shí)間戳
$target = strtotime($expireTime);
// 計(jì)算時(shí)間差
$diff = $target - $now;
// 存入redis
$redis->set($proxy_name,$proxyServer,$diff);
最后,完整封裝代碼如下:
// 芝麻ip代理配置
public function zhimahttp(){
$proxy_name="proxy_ip";//定義存儲(chǔ)名
$redis = new Redis();
//查詢(xún)r(jià)edis是否有記錄
$re= $redis->get("$proxy_name");
if ($re) {
// 存在記錄使用即可
return "$re";
die();
} else {
//不存在記錄,從芝麻ip獲取并存儲(chǔ)
// 初始化 cURL
$ch = curl_init();
// 設(shè)置 cURL 參數(shù)
curl_setopt($ch, CURLOPT_URL, "htt**********ns=");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// 發(fā)送請(qǐng)求并獲取響應(yīng)
$response = curl_exec($ch);
// 關(guān)閉 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'];
// 輸出解析結(jié)果
// echo "IP: $ip\n";
// echo "Port: $port\n";
// echo "expireTime: $expireTime\n";
$proxyServer = 'http://' . $ip.':'.$port;
// echo "$proxyServer";
// 獲取當(dāng)前時(shí)間戳
$now = time();
// 將時(shí)間字符串轉(zhuǎn)換為時(shí)間戳
$target = strtotime($expireTime);
// 計(jì)算時(shí)間差
$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)
);
}
}
}
調(diào)用檢測(cè)模塊:
上面的代碼中,我們已經(jīng)在控制器中封裝了方法,如何使用呢?
在tp5中調(diào)用方法即可,調(diào)用方法:
//代理ip
$proxyServer =$this->zhimahttp();
//代理ip
結(jié)合我的業(yè)務(wù)代碼,在訪問(wèn)接口前進(jìn)行調(diào)用檢查即可,接下來(lái)是一個(gè)示例:
//調(diào)用代理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沒(méi)用上
接口測(cè)試
訪問(wèn)一次目標(biāo)接口,由于第一次redis中沒(méi)有記錄,所以會(huì)存入名為proxy_ip的數(shù)據(jù)
再次訪問(wèn)(記錄沒(méi)有過(guò)期),由于記錄存在所以就直接返回代理ip了,測(cè)試了下小程序接口可以正常使用
最后
喜歡爬蟲(chóng)類(lèi)文章的可以訂閱我專(zhuān)欄哦
??歡迎訂閱?? ??歡迎訂閱??
??Python爬蟲(chóng)項(xiàng)目實(shí)戰(zhàn)系列文章??!
??歡迎訂閱?? ??歡迎訂閱??
??Python爬蟲(chóng)項(xiàng)目實(shí)戰(zhàn)系列文章?。?br> ??往期文章??
【Python爬蟲(chóng)項(xiàng)目實(shí)戰(zhàn)一】獲取Chatgpt3.5免費(fèi)接口文末付代碼(過(guò)Authorization認(rèn)證)
【Python爬蟲(chóng)項(xiàng)目實(shí)戰(zhàn)二】Chatgpt還原驗(yàn)證算法-解密某寶偽知網(wǎng)數(shù)據(jù)接口
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-489920.html
??往期文章??文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-489920.html
到了這里,關(guān)于【Redis】孔夫子舊書(shū)網(wǎng)爬蟲(chóng)接入芝麻代理IP:代理IP利用效率最大化的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!