主页  范文大全   设计学院   SEO研究   免费资源   网赚大全  QQ资源区    电影下载  在线电影   短信&笑话   校内网   理财知识   站长Blog   访客留言   顶级QQ百科

         声明:本站所有资料素材均是由站长精心整理搜集的,属于原创。我们同意您的转载和复制,但是在转载复制时请保留文字出处。本站资料全部免费使用,无需注册,力求打造华北最强最大的免费资源网站。

  采集器,通常又叫小偷程序主要是用来抓取别人网页内容关于采集器的制作,其实并不难,就是远程打开要采集的网页,然后用正则表达式将需要的内容匹配出来,只要稍微有点正则表达式的基础都能做出自己的采集器来

  前几天做了个小说连载的程序,因为怕更新麻烦,顺带就写了个采集器采集八路中文网,功能比较简单,不能自定义规则,不过大概思路都在里面了自定义规则可以自己来扩展

  用php来做采集器主要用到两个函数:file_get_contents()和preg_match_all(),前一个是远程读取网页内容的,不过只在php5以上的版本才能用,后一个是正则函数用来提取需要的内容

  下面就一步一步来讲功能实现

  因为是采集小说,所以首先要将书名、作者、类型这三个提取出来信息可根据需要提取

  这里以《回到明朝当王爷》为目标,先打开书目页链接:http://www.86zw.com/Book/3727/Index.aspx

  多打开几本书会发现,书名的基本格式是:http://www.86zw.com/Book/书号/Index.aspx于是们可以做一个开始页,定义一个<input type=text name=number>,用来输入需要采集的书号以后就可以通过$_POST‘number’这种格式来接收需要采集书号了接收到书号,下面要做的就是构造书目页:$url=http://www.86zw.com/Book/$_POST‘number’/Index.aspx,当然这里是举个例子,主要是为了讲解方便实际制作的时候最好检查一下$_POST‘number’合法性

  构造好URL以后就可以开始采集书籍信息了使用file_get_contents() 函数打开书目页:$content=file_get_contents($url)这样就能将书目页内容都读取出来了接下来就是将书名、作者和类型等信息匹配出来了这里就以书名为例其他都一样 打开书目页,查看源文件,找到“<span class="booktitle">《回到明朝当王爷》</span>”这就是要提取出来书名了提取书名的正则表达式:/<span class=\"newstitle\">(.*?)\<\/span>/is使用preg_match_all()函数将书名取出:preg_match_all("/<span class=\"newstitle\">(.*?)\<\/span>/is",$contents,$title);这样$title00的内容就是们要的标题了(preg_match_all函数用法可以去百度查这里就不详细说明了)取出了书籍信息,接下来就是取章节内容了,要取章节内容首先要做的就是找到每一章地址,然后远程打开章节,用正则将内容取出来入库或者直接生成html静态文件这个是章节列表的地址:http://www.86zw.com/Html/Book/18/3727/List.shtm,可以看出这个和书目页一样是有规律可寻:http://www.86zw.com/Html/Book/分类号/书号/List.shtm书号前面已经取得,这里的关键是找到分类号分类号可以在前面书目页找到提取分类号:

  preg_match_all("/Html\/Book\/0-9{1,}\/0-9{1,}\/List\.shtm/is",$contents,$typeid);这样还不够还需要一个切取函数:

  复制PHP代码 - PHP代码如下:

function cut($string,$start,$end){
$message = explode($start,$string);
$message = explode($end,$message1); return $message0;}其中$string为要被切取的内容,$start为开始的地方$end为结束地方取出分类号:

$start = "Html/Book/";
$end
= "List.shtm";
$typeid = cut($typeid00,$start,$end);
$typeid = explode("/",$typeid);/php

  这样$typeid0就是们要找分类号了接下来就是构造章节列表地址了:$chapterurl = http://www.86zw.com/Html/Book/.$typeid0/$_POST‘number’/List.shtm有了这个就能找到每一章节地址了方法如下:

$ustart = "\"";
$uend
= "\"";
//t表示title缩写
$tstart = ">";
$tend
= "<";
//取路径,例如:123.shtm,2342.shtm,233.shtm
preg_match_all("/\"0-9{1,}\.(shtm)\"/is",$chapterurl,$url);
//取标题,例如:第一章 九世善人
preg_match_all("/<a href=\"0-9{1,}\.shtm\"(.*?)\<\/a>/is",$file,$title);
$count = count($url0);
for($i=0;$i<=$count;$i++)
{
$u = cut($url0$i,$ustart,$uend);
$t = cut($title0$i,$tstart,$tend);
$array$u= $t;
}

  $array数组就是所有的章节地址了,到这里,采集器就完成一半了剩下就是循环打开每个章节地址,读取然后将内容匹配出来这个比较简单这里就不详细叙述了好了,今天就先写到这吧第一次写这么长文章,语言组织方面难免有问题还请大家多包涵
教程录入:xxYsh.com    责任编辑:admin 
发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口

推荐链接