MENU

提供一个采集代理ip网站的思路

• April 5, 2020 • 教程

事情起因

我也好奇为什么每次写博客都要写心理活动,害,算了算了,不管那么多了。反正大概的起因都是想试试php+curl+代理ip可不可以做到刷网站ip的效果,然后需要大量代理ip,一个一个复制太慢(懒癌晚期患者)于是便想直接采集下来,方便自己使用。

说干就干

虽然说不知道为什么,但是我感觉你们已经猜到这部分的标题是“说干就干”了,是不是还少一句现在补上。想到了不做不是我的性格,所以说既让想到了就要实现!
首先我们去度娘搜索一下代理ip的网站,找一个代理ip多还免费的网站,然后我选的是快代理(不是广告)
1.png
然后Ctrl+U分析网页源代码,然后发现我们需要获取的数据在<tbody></tbody>之间,然后我们先利用正则表达式把<tbody></tbody>之间的内容都过滤出来。

<?php
$a = get_curl("https://www.kuaidaili.com/free/inha/1/");
preg_match_all("/<tbody>(.*)<\\/tbody>/si",$a,$b);
$array = $b[0][0];

就这样$array这个的内容就是这个页面<tbody></tbody>之间的内容了,接着我们需要把字符串替换一下,替换成我们需要的形式

//需替换的字符串
$text = ['<tbody>','</tbody>','<tr>','</td>',' ',"\n"];
//替换成的字符串
$replace = ['','','','+','',''];
$array = array_filter(explode('</tr>',str_replace($text,$replace,$array)));

就这样$array大变身,成了方便我们进行下一步操作的形式,我们可以利用explode()函数来将它分割成了数组,所以说下面我们可以加一个for循环来生成代理ip的数组

for($i=0;$i<count($array);$i++){
  //需要替换一下剩下的内容
  $arr1 = ['<tddata-title="IP">','<tddata-title="PORT">','<tddata-title="匿名度">','<tddata-title="类型">','<tddata-title="位置">','<tddata-title="响应速度">','<tddata-title="最后验证时间">'];
  $arr2 = ['','','','','','',''];
  //再再再次分割数组
  $info = array_filter(explode('+',str_replace($arr1,$arr2,$array[$i])));
  //生成代理ip列表
  $proxy[] = ['ip'=>$info[0],'port'=>$info[1],'anonymous'=>$info[2],'type'=>$info[3],'location'=>$info[4]];
}

就这样我们已经完成了所有的步骤,$proxy就是整个代理ip的列表,我们只采集了第一页,需要其他页码可以改一下页码,但是我还是比较喜欢json,所以说还是把它当做json输出吧。

exit(json_encode($proxy));

查看效果

本次测试一下,看看输出的json是什么样的

// 20200405201929
// http://127.0.0.1/

[
  {
    "ip": "171.11.178.164",
    "port": "9999",
    "anonymous": "高匿名",
    "type": "HTTP",
    "location": "河南省济源市电信"
  },
  {
    "ip": "175.42.123.178",
    "port": "9999",
    "anonymous": "高匿名",
    "type": "HTTP",
    "location": "福建省宁德市联通"
  },
  {
    "ip": "163.204.243.10",
    "port": "9999",
    "anonymous": "高匿名",
    "type": "HTTP",
    "location": "广东省汕尾市联通"
  },
  {
    "ip": "1.198.111.240",
    "port": "9999",
    "anonymous": "高匿名",
    "type": "HTTP",
    "location": "河南省鹤壁市电信"
  }
]

结尾的话

其实我本来想直接上传的服务器然后提供接口的,但是后来发现这里的代理ip根本用不了(也用可能是我不会用)所以说还是提供一个思路出来,方便你们改代码。

Last Modified: May 26, 2020
Archives 下载海报
QR Code for this page
Tipping QR Code
Leave a Comment

已有 1 条评论
  1. 博主你好,能问一下你用的是shen'm 代码修饰插件吗?看起来挺好看的,能分享一下嘛