PHP开发案例:用PHP写一个简单的蜘蛛统计代码

在前面的文章中我们已经学习了怎么来识别蜘蛛(搜素引擎的爬虫),现在我们来运用我们学习到的知识写一个简单的程序。当然你必须在你需要统计的页面引入spider.php,否则是无法统计到的哦!

一、spider.php

<?php
function spider(){
$spider='0';//首先定义蜘蛛的默认值为0
$user_agent = $_SERVER['HTTP_USER_AGENT'];
$user_agent=strtolower($user_agent);
if(strpos($user_agent,'baidu.php')>='1'){$spider='0';
}elseif(strpos($user_agent,'spider_log.php')>='1'){$spider='0';
}elseif(strpos($user_agent,'spider.php')>='1'){$spider='0';
}elseif(strpos($user_agent,'google')>='1'){$spider='谷歌';
}elseif(strpos($user_agent,'bing')>='1'){$spider='必应';
}elseif(strpos($user_agent,'Slurp')>='1'){$spider='雅虎';
}elseif(strpos($user_agent,'ahrefs')>='1'){$spider='国外SEO蜘蛛';
}elseif(strpos($user_agent,'baidu')>='1'){$spider='百度';
}elseif(strpos($user_agent,'sogou')>='1'){$spider='搜狗';
}elseif(strpos($user_agent,'yahoo')>='1'){$spider='雅虎';
}elseif(strpos($user_agent,'search')>='1'){$spider='必应';
}elseif(strpos($user_agent,'yodao')>='1'){$spider='有道';
}elseif(strpos($user_agent,'mediabot')>='1'){$spider='谷歌广告';
}elseif(strpos($user_agent,'soso')>='1'){$spider='360搜搜';
}elseif(strpos($user_agent,'ia_archiver')>='1'){$spider='Alexa';
}elseif(strpos($user_agent,'bot',)>='1'){$spider='其他蜘蛛';
}elseif(strpos($user_agent,'spider')>='1'){$spider='其他蜘蛛';
}elseif(strpos($user_agent,'robot')>='1'){$spider='其他蜘蛛';
}elseif(strpos($user_agent,'spiders')>='1'){$spider='其他蜘蛛';
}
return $spider;
}
if(spider()!='0'){
$html[0]=$spider;//蜘蛛名称
$html[1]=$_SERVER["REMOTE_ADDR"];//IP
$html[2]=$_SERVER["SERVER_PORT"];//端口
$html[3]=$_SERVER["HTTP_REFERER"];//访问页面,这里的访问页面为什么是上级页面,因为我们实在网页中使用js代码调用本文件的,如果在你网页的PHP中直接引用本程序
//这里$_SERVER["HTTP_REFERER"]需要换为$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
$html[4]=date('Y-m-d H:i:s',time());//爬取时间
$html[5]=$_SERVER["REQUEST_METHOD"];//访问页面的请求方式
$html[6]=$_SERVER["QUERY_STRING"];//query值
$html=$html[0].'|'.$html[1].'|'.$html[2].'|'.$html[3].'|'.$html[4]."<->";
$file=date("Y-m-d",time()).'.txt';
@file_put_contents("$file",$html, FILE_APPEND);//将蜘蛛爬取信息添加进txt文件保存到本地
}
?>

二、index.php

<?php
$file=date("Y-m-d",time()).'.txt';
@$file = file_get_contents("$file");//获得内容 
@$file = explode("<->",$file);
$x=count($file)-1;
$page=$_GET['page'];
$nums=50;
$pages=$x/$nums;
$pages=ceil($pages);
if($page==null or $page==0 or $page==1){
$page=1;
$max=$nums-1;
$min=0;
}else{
$max=$page*$nums-1;
$min=($page-1)*$nums;
$uppage=$page-1;
$upurl='<a href="http://spider.wensha.info/index.php?page='.$uppage.'">上一页</a>';
$nextpage=$page+1;
$nexturl='<a href="http://spider.wensha.info/index.php?page='.$nextpage.'">下一页</a>';
}
if($page<$pages){
$nextpage=$page+1;
$nexturl='<a href="http://spider.wensha.info/index.php?page='.$nextpage.'">下一页</a>';    
}
if($page>$pages){
$max=$x-1;  
$uppage=$page-1;
$upurl='<a href="http://spider.wensha.info/index.php?page='.$uppage.'">上一页</a>';
$nexturl='';
}
if($page=$pages){
$max=$x-1;
$upurl='';
$nexturl='';
}
$b=0;
for($i=$min;$i<=$max;$i++){
$b=$b+1;
$log = explode("|",$file[$i]);
$echo=<<<EOT<tr><td>&emsp;$b 、 $log[0]</td><td>&emsp;$log[1]</td><td>&emsp;$log[4]</td><td>&emsp;<a href="$log[3]" target="_blank">$log[3]</a></td></tr>
EOT;
$html=$html.$echo;
}
?>
<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>文煞php笔记网 - Spider蜘蛛爬取记录</title><link rel="stylesheet" rev="stylesheet" href="style/main.css" type="text/css" media="all"/>
</head>
<body><header><h1>文煞PHP笔记网</h1></header><nav><a><strong>Spider蜘蛛爬取记录列表</strong>&nbsp;&nbsp;时间:<?=date("Y年m月d日",time())?></a></nav>
<div><table width="100%" class="table"><thead><tr><th>Spider名称</th><th>SpiderIP</th><th>访问时间</th><th>访问页面</th></tr></thead>
<?=$html?></table>   <center></ecnter>共<?=$x?>条记录&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://spider.wensha.info/index.php">首页</a>&nbsp;&nbsp;&nbsp;&nbsp;<?=$upurl?>&nbsp;&nbsp;&nbsp;&nbsp;<?=$nexturl?>&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://spider.wensha.info/index.php?page=<?=$pages?>">尾页</a>&nbsp;&nbsp;&nbsp;&nbsp;<?=$page?>/<?=$pages?></center></div><footer><p><a rel="external nofollow" href="http://beian.miit.gov.cn/" target="_blank">黔ICP备2023001763号-1</a></p><p>版权所有  2023   文煞PHP笔记网蜘蛛统计代码v.0.0.1</p ></footer>
</body>

三、main.css

 body {margin: 0;padding: 0;font-family: Arial, sans-serif;background-color: #f2f2f2;}header {background-color: #333;color: #fff;padding: 10px;text-align: center;}nav {background-color: #ddd;padding: 10px;text-align: center;}nav a {display: inline-block;padding: 10px;color: #333;text-decoration: none;}section {padding: 20px;text-align: center;}footer {background-color: #333;color: #fff;padding: 20px;text-align: center;}@media only screen and (min-width: 600px) {header {padding: 20px;}nav {display: flex;justify-content: space-around;}nav a {padding: 20px;}section {display: flex;flex-wrap: wrap;justify-content: space-around;}section article {flex-basis: 30%;margin-bottom: 20px;}}
table{border-collapse: collapse;margin: 0 auto;}table td, table th{border: 1px solid #cad9ea;color: #666;height: 30px;}table thead th{background-color: #CCE8EB;width: 100px;}table tr:nth-child(odd){background: #fff;}table tr:nth-child(even){background: #F5FAFA;}a{color:#999999;}a:hover{color:#009900;}a:active{color:#F707EE;}

提示:这里的代码虽然本站已经测试过,但是在发布的时候做了修改,你应该根据错误提示修改相关代码。

更多学习资料请看博客:

方包博客 – 信息技术的it学习平台

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Netty构建Websocket服务端

除了构建TCP和UDP服务器和客户端&#xff0c;Netty还可以用于构建WebSocket服务器。WebSocket是一种基于TCP协议的双向通信协议&#xff0c;可以在Web浏览器和Web服务器之间建立实时通信通道。下面是一个简单的示例&#xff0c;演示如何使用Netty构建一个WebSocket服务器。 项目…

MT3608 高效率1.2MHz2A升压转换器和MT3608L 高效率1.2MHz 2.5A升压转换器 MT3608L和MT3608的区别

MT3608是一个恒定的频率&#xff0c;6引脚SOT23电流模式升压转换器的小&#xff0c;低功耗应用的目的。该MT3608开关在1.2MHz&#xff0c;并允许微小的&#xff0c;低成本的电容器和电感器使用2毫米或更小的高度内部软启动浪涌电流的结果&#xff0c;并延长电池寿命。 …

云渲染怎么批量效果图、影视动画?云渲染在效果图、影视的作用

在设计和建筑领域&#xff0c;设计师往往需要制作出精细逼真的效果图以向客户展示他们的设计思路。然而&#xff0c;在这些行业中&#xff0c;大量生成效果图需求非常费时费力。幸运的是&#xff0c;日期到了云渲染的这个时代&#xff0c;设计师们可以通过云渲染服务以一种更加…

CSM4054 500mA线性锂离子电池充电管理 适用消费类的电子产品

CSM4054 是一款完整的单节鲤离子电池采用恒定电流/恒定电压线性充电器。其 SOT23-5 封装与较少的外部元件数量使得 CSM4054 成为便携式应用的理想选择。 CSM4054 可以适合 USB 电源和适配器电源工作。由于采用了内部 PMOSFET 架构&#xff0c;加上防倒充电路&#xff0…

技术交底二维码的应用

二维码技术交底可以逐级落实、责任到人、有据可查、是目前最方便、实用的交底方式&#xff0c;下面我们讲解技术交底二维码的应用。 1、生成对应的技术交底二维码&#xff0c;将施工方案、技术资料、安全教育资料等内容上传到二维码里。打印出来现场粘贴&#xff0c;便于作业班…

计算机组成原理——指令系统41-60

41、下列哪种指令不属于程序控制指令&#xff08;C&#xff09;。 A、 无条件转移指令 B、 条件转移指令 C、 中断隐指令 D、 循环指令 42、下列关于一地址运算类指令的叙述中&#xff0c;正确的是&#xff08;B&#xff09;。 A、 仅有一个操作数&#xff0c;其地址由指令…

IP技术在网络安全防护中的重要意义

随着互联网的普及&#xff0c;网络安全问题日益凸显。作为网络通信中的重要标识&#xff0c;IP地址在网络安全防护中扮演着关键角色。近日&#xff0c;一则关于IP技术在网络安全防护措施的新闻引起了广泛关注。 据报道&#xff0c;IP技术已成为网络安全防护的重要手段之一。通过…

【星海出品】Keepalived 基础及概念 (一)

今天遇到一个用户&#xff0c;必须使用keepalived去实现高可用。为了让客户满意&#xff0c;所以就从各方面进行一个全方面的解析研究。 开源 keepalived 前世今生 VRRP,全称 Virtual Router Redundancy Protocol,中文名为虚拟路由冗余协议&#xff0c;VRRP的出现是为了解决…

HTML---浮动

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 一.常见的网页布局 二.标准文档流 标准文档流常见标签 标准文档流的组成 块级元素<div…

C++ String的模拟实现

一.基本框架 1.成员变量 string类的成员变量分别是存储字符串的一段空间_str&#xff0c;表示字符串的有效字符个数_size和表示存储有效字符空间的_capacity。 private:char *_str;size_t _size;// 有效字符的个数size_t _capacity;// 存储有效字符的空间还有一个string类的特…

【数据结构】线段树算法总结(单点修改)

知识概览 用作单点修改的线段树有4个操作&#xff1a; pushup&#xff1a;由子节点的信息计算父节点的信息build&#xff1a;初始化一棵树modify&#xff1a;修改一个区间query&#xff1a;查询一个区间 线段树用一维数组来存储&#xff1a; 编号是x的节点&#xff0c;它的父节…

LM358 双运算放大器 用于误差放大器和电压跟随器等电路

LM358 内部包括有两个独立的、高增益、内部频率补偿的双运算放大器&#xff0c;适合于电源电压范围很宽的单电源审用&#xff0c;也适用于双电源工作模式&#xff0c;在推荐的工作条件下&#xff0c;由源电流与电源电压无关。它的使用范围句括传感放大器、直流增益模组&#xf…