本文主要是介绍正则在小偷程序中的应用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
几乎所有的编程的语言都会提供一些方法让你可以快速获取其他网站的内容。尤其对于一些实时更新的数据,如果能够及时抓取到自己的网站中无疑是一笔比较实用的资源。但是这些抓取的方法,是抓取网页中的所有源码。这些未经修饰的数据肯定不是你想要的,所以你需要对这些数据进行处理。
一、获取源码
$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了
这篇关于正则在小偷程序中的应用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!