csdn统计是这么来的

来源:互联网 发布:千百知蓝莓汁多少钱 编辑:程序博客网 时间:2024/06/10 08:43

当我第一次打算做这个统计CSDN的网页的时候,其实我嘴上是拒绝的,我在群里讲,我拒绝,是因为我啥都不会。朋友跟我说,用python,很好,很赞,于是我就选了PHP。我跟他们讲,我选PHP,是因为我的服务器上已经安了PHP。我还说,你们难道不知道吗?“PHP是世界上最好的语言”。就这样,稳重的我慎重的选好了后台语言。

既然什么都不会,就得学,之后我打开了W3School,开始了PHP的学习之旅。恩,就这个网站——



花了好几个小时看完了基础语法,还有数据库的操作,我觉得差不多了,然后就开始了我惊涛骇浪的开发之旅。。。


当然,先写一个index,这可难不倒我,简单弄个html就好了嘛,经过我一次一次的调整布局和美化,终于我觉得页面“很好看”了,就不再管它了。它是这样的——


布局工整,井井有条,看着就充满完成网页的动力。


这里插一句:其实本来只想做个统计的,可是做的时候就觉得这东西要开放度高,要能很多用户使用并且自定义自己将来的列表,于是我花了好久做这些登录的功能还有验证神马的。。。哎,说多了都是泪。。。因为做验证,复习了一遍JS。。。


开始做的时候是想着把验证、显示各种作用的php分开,可是我觉得那调用这几个页面之间得有数据的传递,要不怎么通过验证,传递数据库的表名之类的。后来经过一番权衡,我还是把verify改成了deal,我想一个文件能解决就一个文件吧(PS:真的不是嫌麻烦)。

验证功能还比较好写,连接数据库啥的也都简单,就这样写了几天的代码,我发现核心功能居然还没写。。。。。。就是获取数据。。原来做了这么久只是在修花边,哭。那就写列数据的函数,这时候我觉得得加上一个添加记录的功能,要不用户怎么自定义呢。。。就是这货——


话说界面也有一种简介的扁平化风格呢~

代码也很简单

   <table border="1">     <tr>      <td>添加新的成员:</td>     </tr>     <tr>      <td>       <form action="add.php"   method = 'post'>       学号:<input type = 'text' name = 'number'/>       姓名:<input type = 'text' name = 'name'/>       地址:<input type = 'text' name='address'/>       <input type = 'submit'/ value='添加'>      </td>     </tr>    </table>    <hr>

然后为了给服务器上传数据,我得把数据发给自己,可是发给自己那网页之前的数据就没了,我就都不知道数据是啥了,然后我百般思索并且在群里问了一下,得知用cookie或者Sessions,恩,我用了cookie。。。发现果然好用,于是乎我发现一个php页面太乱了,cookie刚好满足让我把它分开,于是验证成了一个php,list成了一个单独的php,添加也成了一个单独的php,到这里,思路瞬间清晰了,我发现马上就要完成了,边边角角做好了,核心功能不能丢啊,于是google:PHP抓取网页,用了curl,往数据库里加了几条测使用的记录,当时我就激动了,Good,列出来了,没有保存解图,只好用文字描述了,当时感觉一切都是美好的,于是我欢快的把145全班的数据添加到数据库里了,刷新——浏览器小圈圈转了好久,好久,好久。。。。。接收不到数据。。。ok,后台挂了,抓取耗时太长了。

啪,这个世界黑暗了。

我开始想解决办法,大家都说Python的库抓网页效率很高,于是我打算用python写个函数给php用,这样应该能好多了,然后谷歌——恩,我决定优化PHP了(PS:真的真的不是怕麻烦。。。。。。)。google到可以用多线程抓取,不错嘛,那就把curl换成curl_muli嘛。然后继续搜php多线程抓取网页,果然被我搜到了,呶,就这个,看着代码看了一会儿,懵逼了。。。我想这难不倒我的,又继续看了几遍,勉强懂了一点点,算了,不懂还不会直接拿来用嘛,然后就直接Ctrl+C,Ctrl+V!good,可以用

<?php $urls = array( 'http://www.sina.com.cn/', 'http://www.sohu.com/', 'http://www.163.com/' ); $save_to='/test.txt'; // 把抓取的代码写入该文件 $st = fopen($save_to,"a"); $mh = curl_multi_init(); foreach ($urls as $i => $url) { $conn[$i] = curl_init($url); curl_setopt($conn[$i], CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)"); curl_setopt($conn[$i], CURLOPT_HEADER ,0); curl_setopt($conn[$i], CURLOPT_CONNECTTIMEOUT,60); curl_setopt($conn[$i],CURLOPT_RETURNTRANSFER,true); // 设置不将爬取代码写到浏览器,而是转化为字符串 curl_multi_add_handle ($mh,$conn[$i]); } do { curl_multi_exec($mh,$active); } while ($active); foreach ($urls as $i => $url) { $data = curl_multi_getcontent($conn[$i]); // 获得爬取的代码字符串 fwrite($st,$data); // 将字符串写入文件。当然,也可以不写入文件,比如存入数据库 } // 获得数据变量,并写入文件 foreach ($urls as $i => $url) { curl_multi_remove_handle($mh,$conn[$i]); curl_close($conn[$i]); } curl_multi_close($mh); fclose($st); ?> 

而且多线程果然不一样,速度比原来抓三四个网页都快。

至此,网页的制作基本上完成了,当然是功能最简陋的Version_1。

最后来一个网页的写真,表达一下我愉悦的心情~~


后期打算,加个能排序的JS,然后。。。还有。。。等再想吧大笑


结语:语言不是难事,当有了“学着解决当前问题”的能力的时候,不会有太多的困难的,而我应该不断培养学习能力,这个时代,只要不断学习,就不会被时间所抛弃。还有我觉得在进行一个项目之前,系统地学习很有必要的,这样在开发的时候能有更高的效率,我这种粗涉然后东一头西一头的开发,也只适合现在有大把时间的大学。不过,学的东西也很多哦吐舌头。总之,不断学习肯定不会错。

0 0