当前位置:  编程技术>php
本页文章导读:
    ▪curl数据采集系列之代码分离及并行逻辑控制函数web_spider      根据前几篇的博文:curl数据采集系列之单页面采集函数get_htmlcurl数据采集系列之多页面并行采集函数get_htmlscurl数据采集系列之正则处理函数get_matches可以得到了单页面和多页面的采集功能 如.........
    ▪注意过滤分页参数      ......
    ▪apache伪静规则及常见规则用法实例      apache   mod_rewrite模块提供了一个基于正则表达式分析器的重写引擎来实时重写URL请求。它支持每个完整规则可以拥有不限数量的子规则以及附加条件规则的灵活而且强大的URL操作机制。此UR.........

[1]curl数据采集系列之代码分离及并行逻辑控制函数web_spider
    来源:    发布时间: 2013-11-07

根据前几篇的博文:


curl数据采集系列之单页面采集函数get_html


curl数据采集系列之多页面并行采集函数get_htmls


curl数据采集系列之正则处理函数get_matches


可以得到了单页面和多页面的采集功能 如下:



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>!',$html,'没有找到链接',true);
5 if($matches){
6 var_dump($matches);
7 }
8 }


这样不管是如何采集 最后都是处理一个html页面


数据采集的过程经常要深入好几层的页面 得到想要的数据 如论坛:


先采集论坛的列表页 再通过列表页采集到的地址 进入内容页


循环层次太多 代码不好维护 管理 既然是列表页和内容页 的采集规则不一样 把他们分出来成为两个函数



 1 $urls = array(列表页网址1,列表页网址2,列表页网址...);
2 $htmls = get_htmls($urls);
3 foreach($htmls as $html){
4 $list_urls = get_list_urls($html);
5 $contents_htmls = get_htmls($list_urls);
6 foreach($contents_htmls as $c_html){
7 contents_exec($c_html);
8 }
9 }
10 function get_list_urls($html){
11 //处理列表页内容 得到下一层网址
12 return 得到的网址数组;
13 }
14 function contents_exec($html){
15 //处理内容页 插入数据库等等....
16 }


但是这样如果层次更多 循环结构还是会很绕 那么就把这种循环规律 写成一个web_spider函数



 1 function web_spider($urls,$func,$chunk_num,$options = array(),$method = 'get'){
2 //$urls 网址数组
3 //$func 函数名字符串
4 //$chunk_num 一次并行采集的页数
5 //因为使用get_htmls 所以$options $method 不可少
6 $urls_chunk_array = array_chunk($urls,$chunk_num,true);
7 foreach($urls_chunk_array as $urls){
8 $htmls = get_htmls($urls,$options,$method);
9 foreach($htmls as $key=>$html){
10 $func($html,$key);
11 }
12 }
13 }


 


那么代码编写如下:



 1 $urls = array(列表页网址1,列表页网址2,列表页网址...);
2 web_spider($urls,'get_list_urls',10);
3 function get_list_urls($html,$key){
4 //$key 是为了判断哪个页面
5 //处理列表页内容 得到下一层网址
6 web_spider(得到的网址数组,'contents_exec',10);
7 }
8 function contents_exec($html,$key){
9 //$key 是
    
[2]注意过滤分页参数
    来源:    发布时间: 2013-11-07

http://101ban.sinaapp.com/guest/show/2 这是一个网站留言板的分页页面,show方法后面的参数应该是数字,但是如果人为输入一些字符串,就会导致数据库错误,通过分析错误页面的报错信息,可以通过输入数据库sql命令操作数据库,给网站安全带来威胁。因此,不仅用户输入的信息要过滤,很多自带的参数也要进行过滤,防止出现安全问题。


分页代码如下:



$this->load->library ( 'pagination' );
$config ['base_url'] = site_url () . '/guest/show';
$config ['total_rows'] = $c;
$config ['per_page'] = $pernum = 15;
$config ['uri_segment'] = 3;
$config ['use_page_numbers'] = TRUE;
$config ['first_link'] = '第一页';
$config ['last_link'] = '最后一页';
$config ['num_links'] = 5;
$this->pagination->initialize ( $config );
if (! $this->uri->segment ( 3 )) {
$currentnum = 0;
} else {
$currentnum = is_numeric($this->uri->segment ( 3 ))?(intval($this->uri->segment ( 3 ) - 1)) * $pernum:0;
}

$current_page=is_numeric($this->uri->segment ( 3 ))?intval($this->uri->segment ( 3 )):1;
if($current_page){
$data ['title'] = '第'.$current_page.'页-留言本-大冶实验高中首届宏志班网站';
}
else{
$data ['title'] = '留言本-大冶实验高中首届宏志班网站';
}

$data ['liuyan'] = $this->ly->getLy ( $pernum, $currentnum );


其中:


 



$current_page=is_numeric($this->uri->segment ( 3 ))?intval($this->uri->segment ( 3 )):1;
$currentnum = is_numeric($this->uri->segment ( 3 ))?(intval($this->uri->segment ( 3 ) - 1)) * $pernum;


 


这两句判断了参数是否为数字。防止非法字符输入。


 

本文链接


    
[3]apache伪静规则及常见规则用法实例
    来源:    发布时间: 2013-11-07

apache   mod_rewrite模块提供了一个基于正则表达式分析器的重写引擎来实时重写URL请求。它支持每个完整规则可以拥有不限数量的子规则以及附加条件规则的灵活而且强大的URL操作机制。此URL操作可以依赖于各种测试,比如服务器变量、环境变量、HTTP头、时间标记,甚至各种格式的用于匹配URL组成部分的查找数据库。


 使用此模块的条件


1.在apache的httpd.conf里开启LoadModule rewrite_module modules/mod_rewrite.so即把前面的 ‘#’去掉


    如果有操作httpd.conf的权限可以直接在httpd.conf里配置,但多是在网站目录下.htaccess文件里配置


     如果在.htaccess里配置需开启支持.htaccess


           AllowOverride All使.htaccess文件生效



1 <Directory>
2 Options indexes FollowSymlinks
3 AllowOverride All
4 Order allow,deny
5 Allow from all
6 </Directory>


第二行有indexes的话是允许列出目录文件,没有或者-indexes则表示不允许列出目录文件


 示例目录结构


re在apache根目录下



re下demo文件



1 <?php
2 echo $_GET['id'];
3 echo "<br/>";
4 echo "re下的demo<br/>";
5 echo "<hr/>";
6 echo $_SERVER['PHP_SELF'];
7 ?>


r1,r2下demo和demo一样,只是第四行分别为"r1下demo","r2下demo"标志


 


error.html文件里代码也只是标志各自位置


.htaccess文件



1 <IfModule rewrite_module>
2 RewriteEngine On
3 RewriteBase /re/
4
5 RewriteCond %{HTTP_HOST} localhosT [NC]
6 RewriteRule demo(\d+)\.html demo.php?id=$1
7
8 ErrorDocument 404 error.html
9 </Ifmodule>


其中RewriteBase+demo.php是真实文件存在位置,如果没设置此项则以.htaccess文件所在目录为基准


 如果按以上的.htaccess


访问:http://localhost/re/demo1.html


结果:



要访问的demo1.html是以.htaccess所在目录为基准


访问个不存在的目录里的http://localhost/re/a/demo1.html


将会访问到当前RewriteBase下的error.html文件



 



 


 



若 改为:RewriteBase /re/r1 



 


若:



当不匹配时




   ErrorDocument    404   error.html
去找当前RewriteBase 下的error.html


RewriteCond  %{HTTP_HOST}  localhosT [NC]
这句时匹配前的判断条件
如果%{HTTP_HOST} 是localhost就进行下面的RewriteRule
[NC]表示不区分大小写
 注意localhosT,[NC]两者之间有空格
本文只是作些简单的实例演示,更多内容请查看apace手册相关内容!

本文链接


    
最新技术文章:
操作系统 iis7站长之家
▪PHP单一入口之apache配置内容
▪PHP数组排序方法总结(收藏)
▪php数组排序方法大全(脚本学堂整理奉献)
▪php数组排序的几个函数(附实例)
▪php二维数组排序(实例)
▪php根据键值对二维数组排序的小例子
▪php验证码(附截图)
▪php数组长度的获取方法(三个实例)
▪php获取数组长度的方法举例
▪判断php数组维度(php数组长度)的方法
▪php获取图片的exif信息的示例代码
▪PHP 数组key长度对性能的影响实例分析
▪php函数指定默认值的方法示例
▪php提交表单到当前页面、提交表单后页面重定...
▪php四舍五入的三种实现方法
▪php获得数组长度(元素个数)的方法
▪php日期函数的简单示例代码
▪php数学函数的简单示例代码
▪php字符串函数的简单示例代码
▪php文件下载代码(多浏览器兼容、支持中文文...
▪php实现文件下载、支持中文文件名的示例代码...
▪php文件下载(防止中文文件名乱码)的示例代码
▪解决PHP文件下载时中文文件名乱码的问题
▪php数组去重(一维、二维数组去重)的简单示例
▪php小数点后取两位的三种实现方法
▪php Redis 队列服务的简单示例
▪PHP导出excel时数字变为科学计数的解决方法
▪PHP数组根据值获取Key的简单示例
▪php数组去重的函数代码示例
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3