php采集正则怎么,php正则函数在采集程序中的运用

接上一篇,为了在抓取的页面内容中提取我们想要的信息,我们一般要用正则来处理页面内容结果。

比如preg_match_all 函数,可以把符合规则的内容 存到一个数组里面。

用法:

$content=file_get_contents("http://health.china.com/html/breast/fxlan/1.html");

$pattern = "@http://www.yjbys.com/zhaopinhui/index.asp\?rq=(.*?)\">(.*?)@i";

$flag = preg_match_all($pattern,$content,$m);

这里$flag会有两个结果,一是没有匹配到符合规则$pattern的内容,返回false;一是匹配到符合规则的内容,将内容存储在数组$m里。你可以print_r($m); 来检查$m到底有没有内容。

采集就是如此简单。

当然,取得内容后的操作,就不一一说了,无非是入库之类的操作。

在这里要提一下如何才能提高采集效率,就是让你的采集程序跑起来不会太占资源以至于拖垮服务器!

1.在采集程序开始前 先临时定义一下php环境的的限制,如此可以预防跑着跑着突然停止的尴尬。同时也可预防php崩溃。

//脚本最长的运行时间

set_time_limit(180000);

//临时调整的php可用的内存

$r = ini_set("memory_limit","500M") ;

//PCRE的最大回溯(backtracking)步数。貌似跟for循环的次数紧密相关

$r = ini_set("pcre.backtrack_limit","8000") ;

//PCRE的最大递归(recursion)深度。如果你将该值设的非常高,将可能耗尽进程的栈空间,导致PHP崩溃

$r = ini_set("pcre.recursion_limit","8000") ;

2.多点用strpos,substr,explode,str_replace函数,而尽量少用preg_match_all,preg_match()这类正则函数,因为这类函数的效率实在不咋样,我一般都是先用strpos,substr,explode,str_replace函数处理,实在不行,才会用preg_match_all,preg_match

最后也发一下preg_match的用法例子:

//这个表示在字符串$name中查找css字符,将匹配的个数放到$matches里去。

preg_match("/css/", $name, $matches)

$cont=preg_replace("/(?<=href=)([^\>]*)(?=\>)/i","", $cont); //过滤url

$cont=preg_replace( "/.*<\/script>/isU ", "", $cont );//过滤掉javscript

替换所有 class=innerlink 的 a 标签:

$content = preg_replace('/(.*?)/i', '${1}', $content);

上面是两个正则替换的例子。

基本上采集就这些了,而有关正则的话题,下一篇继续…

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值