+ -
当前位置:首页 → 问答吧 → 【原创】菜鸟教你学采集

【原创】菜鸟教你学采集

时间:2008-07-02

来源:互联网

【原创】菜鸟教你写采集【采集新浪小说实现完美采集】
作者:刘军颖  辅导老师:汪建军,李秀军
作者简介:
我是湖南怀化PCTP学员刘军颖,虽然我还很幼稚,但是一进很努力,今天我给大奖讲解一下采集教程,很多人都认为采集是一门很高深的技术,其实只要你稍微细心,就可以发现,采集其实很简单,快乐轻松并采集。
附带说明:本程序需要您自己创建一个目录,目录名不告诉你,自己看程序去
需要做的准备:
1:一个水杯,这个很重要,因为要耐心,就要多喝水。
2:一个电脑,这个很重要,没有这个怎么写。
3:参加湖南PCTP班,和牛人在一起才能成为牛
4:要又眼睛,没有眼睛我是教不会大家了。
5:准备一个盔甲,这个是我需要的,因为板砖可能就要仍了过来。
开工......................................................................................................................................
   先看下源码:
       地址是:http://book.sina.com.cn/nzt/lit/zhuxian2/index.shtml 《很热门的小说哦》

我们第一步是采集所有的连接,我们这个可不是简单的采集一篇文章哦,我们要做的是采集整本书,并且保存到一个文本,因为现在MP3普及了,都可以看电子书了。
一本书要怎么保存呢,当然是要用书名保存便于查找拉,我们先来采集这本书的标题,
先来看一下原形:
<meta name="description" content="诛仙(二),后金庸武侠圣经:诛仙2">
规律是:
<meta name="description" content="标题">
我们来写一下正则表达式吧,不要告诉我不会,不会就来湖南拉,嘿嘿很多大鸟的。
正则表达式:
<meta name=\"description\" content=\"(.*?)\">
下面开始开工拉!我们首先要获得资源,这里需要用到一个函数:
file_get_contents()
介绍:
主要功能:将整个文件读入一个字符串
  原形是:string file_get_contents
( string filename [, bool use_include_path [, resource context [, int offset [, int maxlen]]]] )


具体什么意思呢,其实就是告诉你在某个资源内搜索符合规定的字符串并赋予给一个变量
  上边是开始需要用到的,我们了解一点就开始写一点那样更能够深刻的理解并且能记住,我来分析下写程序的思路:
我们采集一个地址,不会是就采集一本书把所以我们的采集地址是变化的,变化的用什么呢?这个时候一个硕大的粉笔扔了过来,我不是告诉你了吗?变量,一个严厉的王建军老师,用尽了全身力气,汇集在粉笔上对我无情的扔了过来,我想哭。。。。。。。老师打人了!!!!!!!!打家来看啊。
用变量好的,那就用变量,我们获取地址,代码如下:
$url = "http://book.sina.com.cn/nzt/lit/zhuxian2/index.shtml";// 图书地址
有了上边讲的,现在应该可以完全写出来了,开始代码:
<?php


//****************************************************************


$url = "http://book.sina.com.cn/nzt/lit/zhuxian2/index.shtml";// 图书地址


$ver = "old"; //新旧版本


//因为图书他的页面又两种板式,所以我们要在这里区别一下

//****************************************************************


// 获取页面代码 file_get_contents() 把文件读入一个字符串,下边的时候需要用到


$r = file_get_contents($url);


//在上边获取的字符串中搜索标题,并赋值给变量$booktitle,$booktitle是数组,/is就凑活理解成开始吧!


preg_match("/<meta name=\"description\" content=\"(.*?)\">/is",$r,$booktitle);


//把第一个出现捕获的标题赋值给变量bookname。


$bookname = $booktitle[1]; //书名


//print_r ($booktitle);die();不理解的输出这个看看,嘿嘿,帮助大家理解


/*************************************************************************************


*原形:<li><a href=/nzt/lit/zhuxian2/1.shtml target=_blank class=a03>第四十五章  伤痛(1)</a>


*规律是:<li><a href=不固定.shtml target=_blank class=a03>不固定</a>


*ISU是正则的一种模式,该模式是非贪婪模式,也就是说只要匹配上就结束


*************************************************************************************/


$preg = '/<li><a href=(.*).shtml target=_blank class=a03>/isU';


/********************************************************************************


*preg_match_all进行全局正则表达式匹配


*原形:


*
int preg_match_all


*


( string pattern, string subject, array matches [, int flags] )


*意思是:在全局搜索资源变量$preg,得到一个数组赋值给一个变量$zj,这个变量也就是数组了。


*取得其中的资源的时候用标示就可以,不会的看下数组哦!


*汪老师说了,不会数组的给我出去啃书,什么时候会了进来


**********************************************************************************/


preg_match_all($preg, $r, $zj);


//print_r ($zj);die();不理解的输出这个看看,嘿嘿,帮助大家理解


// 计算标题数量,我是问了最后提示大家看又多少章节,采集了多少


$bookzj = count($zj[1]);


//判断你要采集的板式是那种哦,因为内容开始不一样哦,其实可以自动判断的,我也写成了,但是不发布,因为很简单


if ($ver=="new"){



$content_start = "<!--正文内容开始-->";



$content_end = "<!--正文内容结束-->";



}


if ($ver=="old"){



$content_start = "<\/table><!--NEWSZW_HZH_END-->";



$content_end = "<br>";



}


//采集后的文件,然后那来进行处理.这个是设置编码的,为什么是这个呢,因为你看下网站源码,嘿嘿!!!

header("Content-Type:text/html;charset=gb2312");

/*****************************************************************************************

*从1到136页的内容一次合并.这个是最爽的...打个版权,以免有人侵权,嘿嘿,好像我就在侵权哦!!!

*某某一定想杀人,这句意思就是写个版权,创建文件。

*****************************************************************************************/

writer($bookname." 共".$bookzj."节\r\n帅哥刘并于".date("D M j G:i:s T Y")."为了毕业而设计小说整理收集\r\n", "./ljy/".$bookname.".txt","w+");

/*****************************************************************************************

*从1到136页的内容一次合并.这个是最爽的...打个版权,以免有人侵权,嘿嘿,好像我就在侵权哦!!!

*某某一定想杀人,这句意思就是写个版权,创建文件。

*****************************************************************************************/

for ($i=0;$i<$bookzj;$i++) {//提示下:$bookzj里边是什么前边叫你输出了,不明自自己在看下


//echo "http://book.sina.com.cn".$zj[1][$i]".shtml";die();


$str = file_get_contents("http://book.sina.com.cn".$zj[1][$i].".shtml");


preg_match("/(<title>)(.*?)(<\/title>)/is",$str,$title);


$title = str_replace("_读书频道_新浪网","",preg_replace("/<(.*?)>/s","",$title[2]));


/***************************************************************************


*preg_replace执行正则表达式的搜索和替换


*str_replace用法真的不好说,就看例子吧!其实就是一个替换


* str   =   "abcabc".replace(/a/g,   "d");         //结果为   dbcdbc   


* str   =   "abcabc".replace(/a/,   "d");         //结果为   dbcabc   


***************************************************************************/


preg_match("/(".$content_start.")(.*?)(".$content_end.")/is",$str,$content);


$content = preg_replace("/<(.*?)>/s","",str_replace("</p>","\r\n",$content[2]));


$content = str_replace("
","",preg_replace("/^[\s]*\n/is","",$content));


$content = str_replace("  �� ","  ",preg_replace("/^[\s]*\n/is","",$content));



$result = " \r\n第".($i+1)."节--------".$title."_汪老师就是帅 --------- \r\n".$content;


//var_dump ($result);die();


writer($result, "./ailaopo/".$bookname.".txt","a+");


echo "小说".$bookname."共".$bookzj."节,现在整理到第".$i."节 _".$title."<br>";

}
echo "小说".$bookname."共".$bookzj."节 已全部整理完成!";


function writer($content,$url,$mode)
{
    $fp = fopen($url, $mode);
    fwrite($fp, $content);
    fclose($fp);         
}
?>

作者: sulwan   发布时间: 2008-07-01

还是顶一下吧

作者: xjpa7p2   发布时间: 2008-07-01

精神可佳

作者: wjj706   发布时间: 2008-07-03

顶一下

作者: bush   发布时间: 2008-07-03

不但顶,而且还收藏

作者: CFC4N   发布时间: 2008-07-03

热门下载

更多