关于采集
笔记 by ecms 2016-10-04 12:08:19 笔记   帝国CMS   

 关于采集的一些笔记:

例:http://news.163.com/shehui/

 

 

第一步:判断页面地址规则,页面编码转换最好也勾一下,因为有的站是GB2312的编码,而我们的站却是UTF8的

1.jpg

 

通过点击第二页,第三页等,发现网址变换的规律

示例中的网址规则为:

http://news.163.com/special/00011229/shehuinews_02.html#headList

http://news.163.com/special/00011229/shehuinews_03.html#headList

2.jpg

页面地址填定要采集的网址

页面地址方式:把02 03 换成page代替

页码从第二页开始,因为我们的分页地址也是从第二页开始变地址的

补零要勾上,因为页码是02 03,而不是2,3

 

第二步:列表页——信息链接区域正则

要找唯一的代码,div

3.jpg

这里不是说找从哪里开始循环的ul 或者 div 而是找  从循环开始之前的div和循环结束以后的div 开始

 

第三步:信息页链接正则

4.jpg

这里就找循环的标题最近的标签

到这一步,就可以预览一下,是否已经采集出链接来

5.jpg

第四步:内容页正则

6.jpg

 

正文的话请将最后的div后面的唯一代码也写出来

内容页不需要的一些比如 fram div 等不需要的,在内容页过滤正则中,直接点击就可以了,一般是够用了,个别可以用替换来写,比如对方是 XX网 直接替换为 yoyo笔记 等

 

下面就是分页的问题,分页最好是包含在正文的正则中,我是这么试验的,表示没问题

7.jpg

 

同样的,分页也是从页码的开头  也就是上一页的这个部分开始写,到下一页之前的页码片段

到此,对于有分页的内容页采集规则及方式到此结束,一般来说,不管是从GB2312到UTF8  还是UTF8-GB2312 都没问题,个人仅试验过UTF-8采集GB2312的页面,表示没有问题,希望在开发的时候都使用UTF-8编码

 

 


关于div过滤

如果在一开始对于DIV的过滤规则,就已经添加上了,那么就在之前就添加上:

过滤广告正则:
格式:广告开始[!--ad--]广告结束
(针对内容) 

 

PHP Code复制内容到剪贴板
  1. <div id="pages" class="pages tc">[!--ad--]</div>  

 

这条,就表示过滤在分页部分的这一段的div,如:<div id="pages" class="pages tc"><span>上一页</span><span>1</span><span>2</span><span>3</span><span>下一页</span></div>

 


 

关于显示请确认采集页面存在,系统无法取得信息

 QQ图片20161008094611.png

 帝国本身的采集函数使用的是:fopen  与  fread,将其改为curl一般来说 都可以的,个别的站防采集的话,要添加对应的http头

采集读取远程源文件的方法是:

PHP Code复制内容到剪贴板
  1. /e/class/cjfun.php 下的 ViewCjUrl  

 

 

所使用的方法为:

PHP Code复制内容到剪贴板
  1. /e/class/connect.php 下的 ReadFiletext  

将ReadFiletext方法的远程替换为curl方法:

PHP Code复制内容到剪贴板
  1. //取得文件内容   
  2. function ReadFiletext($filepath){  
  3.         $opts = array(  
  4.                 'http'=>array(  
  5.                         'user_agent'=>"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.8 Safari/537.36"  
  6.                 )  
  7.         ); // 模拟伪造信息参数  
  8.         $context = stream_context_create($opts);  
  9.         $filepath=trim($filepath);  
  10.         $htmlfp=@fopen($filepath,"r",false,$context);  
  11.         //远程  
  12.         if(strstr($filepath,"://"))  
  13.         {  
  14.                 while($data=@fread($htmlfp,500000))  
  15.             {  
  16.                         $string.=$data;  
  17.                 }  
  18.         }  
  19.         //本地  
  20.         else  
  21.         {  
  22.                 $string=@fread($htmlfp,@filesize($filepath));  
  23.         }  
  24.         @fclose($htmlfp);  
  25.         return $string;  
  26. }  

 

本文来自于:http://www.phpin.net/thread-397-1-1.html

Powered by yoyo苏ICP备15045725号