关于采集的一些笔记:
例:http://news.163.com/shehui/
第一步:判断页面地址规则,页面编码转换最好也勾一下,因为有的站是GB2312的编码,而我们的站却是UTF8的
通过点击第二页,第三页等,发现网址变换的规律
示例中的网址规则为:
http://news.163.com/special/00011229/shehuinews_02.html#headList
http://news.163.com/special/00011229/shehuinews_03.html#headList
页面地址填定要采集的网址
页面地址方式:把02 03 换成page代替
页码从第二页开始,因为我们的分页地址也是从第二页开始变地址的
补零要勾上,因为页码是02 03,而不是2,3
第二步:列表页——信息链接区域正则
要找唯一的代码,div
这里不是说找从哪里开始循环的ul 或者 div 而是找 从循环开始之前的div和循环结束以后的div 开始
第三步:信息页链接正则
这里就找循环的标题最近的标签
到这一步,就可以预览一下,是否已经采集出链接来
第四步:内容页正则
正文的话请将最后的div后面的唯一代码也写出来
内容页不需要的一些比如 fram div 等不需要的,在内容页过滤正则中,直接点击就可以了,一般是够用了,个别可以用替换来写,比如对方是 XX网 直接替换为 yoyo笔记 等
下面就是分页的问题,分页最好是包含在正文的正则中,我是这么试验的,表示没问题
同样的,分页也是从页码的开头 也就是上一页的这个部分开始写,到下一页之前的页码片段
到此,对于有分页的内容页采集规则及方式到此结束,一般来说,不管是从GB2312到UTF8 还是UTF8-GB2312 都没问题,个人仅试验过UTF-8采集GB2312的页面,表示没有问题,希望在开发的时候都使用UTF-8编码
关于div过滤
如果在一开始对于DIV的过滤规则,就已经添加上了,那么就在之前就添加上:
过滤广告正则:
格式:广告开始[!--ad--]广告结束
(针对内容)
- <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>
关于显示请确认采集页面存在,系统无法取得信息
帝国本身的采集函数使用的是:fopen 与 fread,将其改为curl一般来说 都可以的,个别的站防采集的话,要添加对应的http头
采集读取远程源文件的方法是:
- /e/class/cjfun.php 下的 ViewCjUrl
所使用的方法为:
- /e/class/connect.php 下的 ReadFiletext
将ReadFiletext方法的远程替换为curl方法:
- //取得文件内容
- function ReadFiletext($filepath){
- $opts = array(
- 'http'=>array(
- '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"
- )
- ); // 模拟伪造信息参数
- $context = stream_context_create($opts);
- $filepath=trim($filepath);
- $htmlfp=@fopen($filepath,"r",false,$context);
- //远程
- if(strstr($filepath,"://"))
- {
- while($data=@fread($htmlfp,500000))
- {
- $string.=$data;
- }
- }
- //本地
- else
- {
- $string=@fread($htmlfp,@filesize($filepath));
- }
- @fclose($htmlfp);
- return $string;
- }