php爬虫效果,PHP的爬虫实现

README:一个能向指定邮箱推送所关心新闻内容的插件,测试环境:LAMP+Chrome/Firefox,分下面几个步骤实现:

1.获取目标网站源代码:

实现方法:PHP的curl类

ubuntu下的安装方法:

#sudo apt-get install curl libcurl3 libcurl3-dev php5-curl

然户重启Apache服务:

#sudo /etc/init.d/apache2 restart

[代码]php代码:

1function GetHtmlCode($url){

2$ch = curl_init();//初始化一个cur对象

3curl_setopt ($ch, CURLOPT_URL,$url);//设置需要抓取的网页

4curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);//设置crul参数,要求结果保存到字符串中还是输出到屏幕上

5curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT,1000);//设置链接延迟

6$HtmlCode = curl_exec($ch);//运行curl,请求网页

7return $HtmlCode;

8}function GetHtmlCode($url){

$ch = curl_init();//初始化一个cur对象

curl_setopt ($ch, CURLOPT_URL, $url);//设置需要抓取的网页

curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);//设置crul参数,要求结果保存到字符串中还是输出到屏幕上

curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT,1000);//设置链接延迟

$HtmlCode = curl_exec($ch);//运行curl,请求网页

return $HtmlCode;

}

2.用正则表达式截取出源代码中的所有链接:

//参数说明:$string=GetHtmlCode($url)

[代码]php代码:

01function GetAllLink($string) {

02$string =str_replace("r","",$string);

03$string =str_replace("n","",$string);

04$regex[url] ="((http|https|ftp|telnet|news)://)?([a-z0-9_-/.]+.[][a-z0-9:;@=_~%?/.,+-]+)";

05$regex[email] ="([a-z0-9_-]+)@([a-z0-9_-]+.[a-z0-9-._-]+)";

06

07

08//去掉网页中的[]

09$string =eregi_replace("[|]","",$string);

10

11//去掉JAVASCRIPT代码

12$string =eregi_replace("","",$string);

13

14//去掉非的HTML标签

15$string =eregi_replace("?[^aA][^<>]*>","",$string);

16//分割$string中的所有链接

17$output = split('',$string);

18for($i=0;$i

19$output_1 = split("

20}

21return $output_1;

22}

function GetAllLink($string) {

$string = str_replace("r","",$string);

$string = str_replace("n","",$string);

$regex[url] = "((http|https|ftp|telnet|news)://)?([a-z0-9_-/.]+.[][a-z0-9:;@=_~%?/.,+-]+)";

$regex[email] = "([a-z0-9_-]+)@([a-z0-9_-]+.[a-z0-9-._-]+)";

//去掉网页中的[]

$string = eregi_replace("[|]","",$string);

//去掉JAVASCRIPT代码

$string = eregi_replace("","", $string);

//去掉非

$string = eregi_replace("?[^aA][^<>]*>","",$string);

//分割$string中的所有链接

$output = split('

', $string);

for($i=0; $i

$output_1 = split("

}

return $output_1;

}

3.这步则是获取用户关心的链接:

//参数说明:$test=GetAllLink($string);$keywords是用户提交的关键字(支持多关键字,他们之间使用";"隔开);$url是目标根网站目录(为某些链接加上根链接)

[代码]php代码:

01function GetUserCareNews ($test,$keywords,$url) {

02$messTxt ="";

03$k=0;

04$key =explode(";",$keywords);

05

06//自动为网站加载上http,避免网易邮箱链接错误,有一定的局限性

07if(!ereg("http",$url)){

08$url ="http://".$url;

09}

10

11for($i=0;$i

12$test[$i] =eval('return'.iconv('gbk','utf-8',var_export($test[$i],true)).';');//修改编码

13if(ereg("href",$test[$i])  && !ereg("href='#'",$test[$i])){//去掉无效链接

14for($j=0;$j

15if(strpos($test[$i],$key[$j])!==false){

16$mess[$k++]=ereg_replace($key[$j],"".$key[$j]."",$test[$i]);//高亮关键字

17}

18}

19}

20}

21$mess =array_unique($mess);//数组去重

22

23//处理好发送链接,为链接加上网站根目录

24for($l=0;$l

25if(!ereg("http",$mess[$l]) && (strlen($mess[$l]) != 0)){//去掉空数组,这步很重要,如果不去掉直接影响后面链接的质量

26$mess[$l] =eregi_replace("href=["']","",$mess[$l]);

27$mess[$l] =$url.$mess[$l];

28$mess[$l] =eregi_replace(" /","/",$mess[$l]);

29if(ereg("'",$mess[$l])){

30$mess[$l]="

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值