Home  >  Article  >  php教程  >  PHP正则表达式的使用技巧

PHP正则表达式的使用技巧

WBOY
WBOYOriginal
2016-06-06 20:13:571066browse

初学php,需要做一些信息抓取的工作,刚开始用的是Simple-Html-Dom做的网页的解析,发现虽然使用起来会比较方法,但是缺点也是致命的,速度慢,控制不精准,后来也接触了Snoopy,效果还是不怎么好,所以选择了使用Curl+正则来做网页的抓取和解析工作。 functi

初学php,需要做一些信息抓取的工作,刚开始用的是Simple-Html-Dom做的网页的解析,发现虽然使用起来会比较方法,但是缺点也是致命的,速度慢,控制不精准,后来也接触了Snoopy,效果还是不怎么好,所以选择了使用Curl+正则来做网页的抓取和解析工作。

function dangdang ($keywords)
{
//$keywords="java";//搜索关键词
$urls='http://search.dangdang.com/?key='.$keywords.'&category_path=01.00.00.00.00.00&type=01.00.00.00.00.00/';
//echo $urls;
$st=curl_init();
curl_setopt($st, CURLOPT_URL, $urls);
curl_setopt($st, CURLOPT_RETURNTRANSFER,1);//返回内容为字符串
curl_setopt($st,CURLOPT_FOLLOWLOCATION,TRUE);
curl_setopt($st,CURLOPT_MAXREDIRS,2);//设置重定向最大两次
curl_setopt($st,CURLOPT_TIMEOUT,100);//等待时间不超过五秒
$dl_page=curl_exec($st);
$info_arr=curl_getinfo($st);
//var_dump($info_arr);
preg_match_all("/<a title='.*/",$dl_page,$matches_all);' count for echo>';
preg_match_all("/\btitle\b=\"([^\"]*)\"\s*\bclass\b/",$matches_all[0][$count],$matches_title);
echo($matches_title[1][0]);
echo '<br>';
preg_match_all("/\bhttp\b\:\/\/img.*\bjpg\b/",$matches_all[0][$count],$matches_img);
echo ('<img  src="'.%24matches_img%5B0%5D%5B0%5D.'" alt="PHP正则表达式的使用技巧" >');
echo '<br>';
preg_match_all("/\bhttp\b([^A]*)\bA\b/",$matches_all[0][$count],$matches_url);
echo($matches_url[0][0]);
echo '<br>';
preg_match_all("/\bhttp\b\:\/\/\bcomm\b([^\"]*)/",$matches_all[0][$count],$matches_plurl);
//preg_match_all("/</a><a echo>';
preg_match_all("/\bdetail\b\"\s*\>([^\';
preg_match_all("/\&\byen\b\;\d+\.\d\d/",$matches_all[0][$count],$matches_price);
preg_match_all("/\d+\.\d\d/",$matches_price[0][0],$matches_price);
echo($matches_price[0][0]);
//echo($matches_price[0][0]);
echo '<br>';
preg_match_all("/num\b\"\>\d*/",$matches_all[0][$count],$matches_pinglun);
preg_match_all("/\d+/",$matches_pinglun[0][0],$matches_pinglun);
echo($matches_pinglun[0][0]);
echo '<br>';
preg_match_all("/\btitle\b=\'([^\']*)\'/",$matches_all[0][$count],$matches_price);
echo($matches_price[1][0]);
echo '<br>';
}
}
</a>

以上代码实现了对当当网搜索数据的抓取和分析,取出了书名,作者价格简介等信息,下面介绍一下正则的使用技巧。

以亚马逊网站为例:

查看亚马逊网站搜索结果页面的源码,找到搜索商品结果部分代码

亚马逊看到这个源码后相信大多数人头都大了,我们可以仔细分析网站页面的特点,我们发现每个商品的信息都是保存在li标签里面,而且每个li都有自己固定的IDli,这就是我们的突破口,即匹配li和ID即可确定每个商品的位置,还需要注意的是在每个li标签中还有换行和空行这样的地方普通的.*模糊匹配无法匹配,所以在进行模糊匹配时还需要进行换行\n和空行的匹配

preg_match_all("/\
<p>这样就可以确定每个商品的信息,然后再进行商品名称和价格的匹配,这样可以减少错误的匹配。</p>
<p>?</p>
<p>?</p>

    <p class="copyright">
        原文地址:PHP正则表达式的使用技巧, 感谢原作者分享。
    </p>
    
    


Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn