当前位置: 编程技术>php
本页文章导读:
▪curl数据采集系列之正则处理函数get_matches 根据前两篇的博文: curl数据采集系列之单页面采集函数get_html curl数据采集系列之多页面并行采集函数get_htmls 已经可以得到了我们需要的html文件,现在需要处理得到.........
▪PHP 输出九九乘法表 PHP 输出九九乘法表:<?php echo "<table width=550px border='1'>"; //确定行 for($i=1;$i<=9;$i++){ echo "<tr>"; for($j=1;$j<=$i;$j++){ $res=$i*$j; echo "<td>"; .........
▪PHP开发环境搭建 apache2.2.X和PHP5.2.X环境搭建指南 1.下载并安装apache2.2.Xhttp://mirror.bjtu.edu.cn/apache//httpd/binaries/win32/下载 httpd-2.2.21-win32-x86-no_ssl.msi 2.下载PHP5.2.Xhttp://windows.php.net/download/下载 php-5.2.17-W.........
[1]curl数据采集系列之正则处理函数get_matches
根据前两篇的博文:
curl数据采集系列之单页面采集函数get_html
curl数据采集系列之多页面并行采集函数get_htmls
已经可以得到了我们需要的html文件,现在需要处理得到的文件获取到我们需要的采集的数据。
对于html文档的解析,没有像XML那样的解析类,因为HTML文档有很多不成对的标签,很不严格。这个时候就需要采用其他的一些辅助类了,simplehtmldom是一个类似于JQuery方式操作HTML文档的解析类。可以很方便的得到想要的数据,可惜速度慢。这里不是我们这里讨论的重点,我主要使用正则来匹配我所需要的采集的数据,可以很快速的得到我需要采集的信息。
考虑到get_html可以判断返回的数据,但是get_htmls没有办法判断,为了方便调式和调用写了如下两个函数:
1 function get_matches($pattern,$html,$err_msg,$multi=false,$flags=0,$offset=0){
2 if(!$multi){
3 if(!preg_match($pattern,$html,$matches,$flags,$offset)){
4 echo $err_msg."! 错误信息: ".get_preg_err_msg()."\n";
5 return false;
6 }
7 }else{
8 if(!preg_match_all($pattern,$html,$matches,$flags,$offset)){
9 echo $err_msg."! 错误信息: ".get_preg_err_msg()."\n";
10 return false;
11 }
12 }
13 return $matches;
14 }
15 function get_preg_err_msg(){
16 $error_code = preg_last_error();
17 switch($error_code){
18 case PREG_NO_ERROR :
19 $err_msg = 'PREG_NO_ERROR';
20 break;
21 case PREG_INTERNAL_ERROR:
22 $err_msg = 'PREG_INTERNAL_ERROR';
23 break;
24 case PREG_BACKTRACK_LIMIT_ERROR:
25 $err_msg = 'PREG_BACKTRACK_LIMIT_ERROR';
26 break;
27 case PREG_RECURSION_LIMIT_ERROR:
28 $err_msg = 'PREG_RECURSION_LIMIT_ERROR';
29 break;
30 case PREG_BAD_UTF8_ERROR:
31 $err_msg = 'PREG_BAD_UTF8_ERROR';
32 break;
33 case PREG_BAD_UTF8_OFFSET_ERROR:
34 $err_msg = 'PREG_BAD_UTF8_OFFSET_ERROR';
35 break;
36 default:
37 return '未知错误!';
38 }
39 return $err_msg.': '.$error_code;
40 }
2 if(!$multi){
3 if(!preg_match($pattern,$html,$matches,$flags,$offset)){
4 echo $err_msg."! 错误信息: ".get_preg_err_msg()."\n";
5 return false;
6 }
7 }else{
8 if(!preg_match_all($pattern,$html,$matches,$flags,$offset)){
9 echo $err_msg."! 错误信息: ".get_preg_err_msg()."\n";
10 return false;
11 }
12 }
13 return $matches;
14 }
15 function get_preg_err_msg(){
16 $error_code = preg_last_error();
17 switch($error_code){
18 case PREG_NO_ERROR :
19 $err_msg = 'PREG_NO_ERROR';
20 break;
21 case PREG_INTERNAL_ERROR:
22 $err_msg = 'PREG_INTERNAL_ERROR';
23 break;
24 case PREG_BACKTRACK_LIMIT_ERROR:
25 $err_msg = 'PREG_BACKTRACK_LIMIT_ERROR';
26 break;
27 case PREG_RECURSION_LIMIT_ERROR:
28 $err_msg = 'PREG_RECURSION_LIMIT_ERROR';
29 break;
30 case PREG_BAD_UTF8_ERROR:
31 $err_msg = 'PREG_BAD_UTF8_ERROR';
32 break;
33 case PREG_BAD_UTF8_OFFSET_ERROR:
34 $err_msg = 'PREG_BAD_UTF8_OFFSET_ERROR';
35 break;
36 default:
37 return '未知错误!';
38 }
39 return $err_msg.': '.$error_code;
40 }
可以这样调用:
1 $url = 'http://www.baidu.com';
2 $html = get_html($url);
3 $matches = get_matches('!<a[^<]+</a>!',$html,'没有找到链接',true);
4 if($matches){
5 var_dump($matches);
6 }
2 $html = get_html($url);
3 $matches = get_matches('!<a[^<]+</a>!',$html,'没有找到链接',true);
4 if($matches){
5 var_dump($matches);
6 }
或者这样调用:
1 $urls = array('http://www.baidu.com','http://www.hao123.com');
2 $htmls = get_htmls($urls);
3 foreach($htmls as $html){
4 $matches = get_matches('!<a[^<]+</a>!',
2 $htmls = get_htmls($urls);
3 foreach($htmls as $html){
4 $matches = get_matches('!<a[^<]+</a>!',
[2]PHP 输出九九乘法表
PHP 输出九九乘法表:
<?php
echo "<table width=550px border='1'>";
//确定行
for($i=1;$i<=9;$i++){
echo "<tr>";
for($j=1;$j<=$i;$j++){
$res=$i*$j;
echo "<td>";
echo "$j"."x"."$i=".$res;
echo "</td>";
}
echo "</tr>";
}
echo "</table>";
?>
echo "<table width=550px border='1'>";
//确定行
for($i=1;$i<=9;$i++){
echo "<tr>";
for($j=1;$j<=$i;$j++){
$res=$i*$j;
echo "<td>";
echo "$j"."x"."$i=".$res;
echo "</td>";
}
echo "</tr>";
}
echo "</table>";
?>
本文链接
[3]PHP开发环境搭建
apache2.2.X和PHP5.2.X环境搭建指南
1.下载并安装apache2.2.X
http://mirror.bjtu.edu.cn/apache//httpd/binaries/win32/
http://mirror.bjtu.edu.cn/apache//httpd/binaries/win32/
下载 httpd-2.2.21-win32-x86-no_ssl.msi
2.下载PHP5.2.X
http://windows.php.net/download/
下载 php-5.2.17-Win32-VC6-x86.zip
3.配置
C:\apache\conf\http.conf
LoadModule php5_module c:/php/php5apache2_2.dll
AddType application/x-httpd-php .php
PHPIniDir "c:/php"
AddType application/x-httpd-php .php
PHPIniDir "c:/php"
4.测试
5.注意事项:
1. PHP下载VC6线程安全版本,thread safe版的安装过程中有apache 2.2.x module选项
本文链接
最新技术文章:
 
站内导航:
特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!