最新消息:

除Python外,PHP也能做爬虫?PHP定时爬取代理IP

PHP daimagou 193浏览 0评论

如今网络上资源很多,站长为了留住用户,一般都有IP限制,每天只能看多少文章下载多少资源,无疑对用户体验非常的不好,为了解决用户想一次看个够却又做不到的问题,写下这篇文章。

很多有点网络经验的朋友都知道,在IP被限制时我们都会采用代理IP的方式进行访问。网络上分享代理IP的网站也特别多,如果你需要大量的IP,手动去复制是非常麻烦的,下面就教大家做一个简单的自动获取IP的服务。

除Python外,PHP也能做爬虫?PHP定时爬取代理IP

说起网络爬虫大家第一反应就是Python,但笔者不会这门语言,就用比较常用的PHP来写吧,当然如果大量的话就不建议使用PHP,毕竟它的能力有限。

首先要知道爬虫就是不断的访问你的网页,然后通过各种解析手段取得所需要的内容。我们需要的代理IP只需要IP地址和端口就可以了,其它的所在位置、隐匿性等等不需要就不要抓了。下面是核心代码:

设置PHP运行状态为后台运行。

ignore_user_abort(); // 后台运行 set_time_limit(0); // 取消脚本运行时间的超时上限$interval=60*5;// 每隔5分钟运行,这个间隔时间是可以随着 需要进行修改 do{ for($n=1;$n<2;$n++){ //抓取http://www.66ip.cn 这个网站上的IP内容 $subject = qwbzj(gethtml(“http://www.66ip.cn/”.$n.”.html”),”验证时间”,”mypage”); $pattern = ‘/\d+\.\d+\.\d+\.\d+<\/td><td>\d+/’; preg_match_all($pattern, $subject, $matches); for ($i= 0;$i< count($matches); $i++){ for($j=0;$j<count($matches[$i]);$j++){ $str= $matches[$i][$j]; $protyipss=str_replace(“</td><td>”,”:” ,$str ); // echo str_replace(“</td><td>”,”:” ,$str ).”<br />”; if(mysqll($protyipss)==1){ // echo “成功”; }else{ // echo “失败”; } //checkproty($protyipss); } } } sleep($interval); // 休眠5分钟 }while(true); 获取网页源码。使用file_get_contents()函数来获取网页源码,再配合字符串构造一个取文本中间的方法,用来剔除网页中不需要的部分,最后用上面的正则匹配进行匹配。

/** *取文本中间 * */ function qwbzj($str, $leftStr, $rightStr) { $left = strpos($str, $leftStr); //echo ‘左边:’.$left; $right = strpos($str, $rightStr,$left); //echo ‘<br>右边:’.$right; if($left < 0 or $right < $left) return ‘’; return substr($str, $left + strlen($leftStr), $right-$left-strlen($leftStr)); } ?>

代码中使用了取消浏览器断开即停止程序运行,启动后即使退出浏览器,程序一样会在后台运行。写完后需要在浏览器中访问一次进行启动,访问之后即可关闭退出,不退出你就只能看到它一直在转圈。程序5分钟进行一次抓取,抓取的内容经过重复验证后插入到数据表中。效果如下:

除Python外,PHP也能做爬虫?PHP定时爬取代理IP

文中代码出现的MySQL语句并没有严格限制,在实际应用中请对MySQL语句的内容进行检查,以免出现注入漏洞。抓取网络中的IP地址到此就结束了,关于代理IP的验证内容太多,下次再讲吧!欢迎关注,收藏。

转载请注明:PHP学习 » 除Python外,PHP也能做爬虫?PHP定时爬取代理IP

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址