博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

最近做的项目,总结一下。

Posted on 2016-03-16 09:38  红与黑hyh  阅读(161)  评论(0编辑  收藏  举报

  学了挺久,发现自己的理论基础确实很薄弱,基本功没有打好,就一直开发新东西,虽然能用,但是在资源和效率方面没做好。还有,现在做的东西,要用到的知识点太少了,很多以前学的,慢慢忘记了。很怀疑自己的记忆力,可是却又无从改变,只能写写博客,多记笔记了。

  最近,刚做了个爬58网站的php爬虫,虽然效率没有python快,但是基本够用了。用到的技术有,ajax , curl 还有image的画布创建加水印的一些函数。

  由于在抓包的时候,需要控制cpu的使用,所以不能连续抓包,只能够采用分段抓取的策略。这里,我用了ajax 和settimout() ,来定期地发送抓取请求到自己的服务器,触发抓取操作(间隔时间为(10s)。

  curl是模拟浏览器,直接发送http请求,获取返回数据。其中配置方面:

$Curl=curl_init();//实例化cURL
curl_setopt($Curl, CURLOPT_URL, $url);//初始化路径
curl_setopt($Curl, CURLOPT_RETURNTRANSFER, 1);//0获取后直接打印出来
curl_setopt($Curl, CURLOPT_HEADER, 0);//0关闭打印相应头,直接打印需为1,
$result=curl_exec($Curl);//执行一个cURL会话
curl_close($Curl);//关闭cURL会话

在curl的配置上,还是很多记不住的东西。还要在研究一番。

  对于抓取的包该这么处理好呢?如果用正则的话,信息量太大,会相当较麻烦,这里我用到了一个php解析DOM 树的框架  simple_html_dom 。它是将所有的html标签,类,id,直接转化成数组的形式,原理和操作跟Jquery相似。效果挺好的!

$houseCon = curl_get_content($houseUrl);
$houseHtml = str_get_html($houseCon);

$houseHtml->find('.tel-num',0)->plaintext;
$houseHtml->find('article',0)->innertext;
$houseHtml->find('.broker_sec_left img',0)->src;
$houseHtml->clear();
unset($houseHtml);

对于图片的处理,用到的函数

$dst = imagecreatefromstring(file_get_contents($imgDst));
$src = imagecreatefromstring(file_get_contents($imgSrc));

list($src_w, $src_h) = getimagesize($imgSrc);
list($dst_w, $dst_h, $dst_type) = getimagesize($imgDst);

imagecopy($dst, $src, $dst_x, $dst_y, 0, 0, $src_w, $src_h);//加上水印

之后就是输出图片

 

整个过程,差不多就这样。