正则在小偷程序中的应用

几乎所有的编程的语言都会提供一些方法让你可以快速获取其他网站的内容。尤其对于一些实时更新的数据,如果能够及时抓取到自己的网站中无疑是一笔比较实用的资源。但是这些抓取的方法,是抓取网页中的所有源码。这些未经修饰的数据肯定不是你想要的,所以你需要对这些数据进行处理。

一、获取源码

$content = file_get_contents("http://blog.csdn.net/shanshan209/?viewmode=contents“);

php中抓取页面源码的函数是 file_get_contents.你只要提供网页的url就可以了。这里为了方便起见,抓取的数据就是我博客的文章列表了。

输出一下$content 的内容你会发现全部都是乱码?那是因为你编码格式没有转换。 $content = iconv("utf-8","gb2312//ignore",$content);在解码中记得加上//ignore用来容错,不然它会遇到错误就会自动中断了,截取的内容就不完整了。

ps:有些主机服务商把php的allow_url_fopen选项是关闭了,就是没法直接使用file_get_contents来获取远程web页面的内容。那就是可以使用另外一个函数curl。你可以利用function_exists函数来检查 file_get_contents函数是否存在。

if(function_exists('file_get_contents')) {
$file_contents = file_get_contents($url);
} else {
$ch = curl_init();
$timeout = 5;
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$file_contents = curl_exec($ch);
curl_close($ch);
}
二、对截取过来的数据进行处理

输出$content 你会发现这些东西并非都是你需要的东西。你只要要博客列表的中的文章名。怎么对数据进行有效处理那?这时候我们可以用正则去匹配。

preg_match_all("/<div class=\\\"article_title\\\">(.+?)<\/div>/s",$content,$article_list);

获取div为article_title的内容。(.+?)用的是懒惰匹配原则,就是尽可能匹配少的字符。

preg_match只匹配一次,preg_match_all是全文匹配,即所有跟表达式一致的都找出来。


三、获取自己要用的数据

$out=array();
            foreach($article_list[1] as $i=>$key){
                $out[$i]=trim(strip_tags($key));
            }
去除html标记,最终的数据是个数组 $out


ps:以上只是一个小实例,真实情况下可能比这个复杂很多。当然我们到时候见招拆招就ok了



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值