爬虫程序即信息采集程序(spiders.php),通过前几节介绍,读者应该已经对爬虫程序的实现原理有了直观的了解,同时也有了一个爬虫程序的基本模型。下面继续完善这个框架程序的业务流程(如添加信息入库等部分内容)。在完善该程序之前,需要给采集器一个启动的入口,这里设定当采集器规则定制完成后就可以开始采集信息了。打开manage.php这个文件找到如下代码:广州网站设计
- <td colspan="2" align="center"><input name="Submit" type="submit"
- class="btn" value="提交" /> <input name="Submit" type="button"
- class="btn" value="返回" onclick="history.go(-1);" />
- </td>
将上述代码修改为:
广州网站设计
- <td colspan="2" align="center"><input name="Submit" type="submit"
- class="btn" value="规则提交" /> <input name="Submit" type="button"
- class="btn" value="开始采集" onclick="loadS1()">
- </td>
【代码解读】
可以看到,当单击"开始采集"按钮后将触发loadS1()这个JavaScript函数,它的功能就是运营采集程序spiders.php。
下面介绍具体的函数。添加loadS1()到manage.php文件中,loadS1()的代码如下:
广州网站建设
- function loadS1()
- {
- window.open ('spiders.php?cid=1')
- }
其中,cid=1的意思是加载栏目id为1的规则开始采集。下面来看具体的spiders.php程序的代码实现:
广州网站建设
- <?php
- //============================
- // 说明: 网页采集器程序
- //============================
- //获得栏目id
- $Category = $_GET ['cid'];
- if ($Category) {
- $con = mysql_connect ( 'localhost', 'root', '198251' ) or die ( 'Could not connect: ' . mysql_error () );
- mysql_query ( "set names gb2312" );
- //echo 'Connected successfully';
- $db = mysql_select_db ( 'get_content', $con );
- if (! $db) {
- die ( "Can\'t use download : " . mysql_error () );
- } else {
- //获得提取规则数组
- $sql = "SELECT * FROM 'spiders' WHERE 'Category'='" . $Category . "' ";
- $result = mysql_query ( $sql, $con );
- $row = mysql_fetch_row ( $result );
- //var_dump ($row);
- if (! $result) {
- mysql_free_result ( $result ); //释放结果集
- }
- }
- } else {
- exit ( "出错了:(" );
- }
- $list_url = $row [5];//待获取页面的地址
- $list_content = file_get_contents ( $list_url ); //获取链接列表
- //var_dump ($list_content);
- //观察链接特征:<li> <a href="/news/2010-05-21/1705605024_4.shtml" title="自主的胜利?" target="_blank" class="fl">自主的胜利?</a><i>
- $list_match = $row [2];//获取列表正则规则
- $content_match = $row [3];//获得文章内容正则规则
- preg_match_all ( $list_match, $list_content, $list_data );
- $i = 0;
- //获取到了一个链接列表
- //print_r($list_data[1]);
- foreach ( $list_data [1] as $detail_url ) {
- //处理一下,如果已经抓取过了,就跳过去
- $detail_content = file_get_contents ( "http://auto.sina.com.cn" . $detail_url );
- //echo ($i++);
- //获取标题
- preg_match ( '/<h1 id="artibodyTitle".+?>(.+?)<\/h1>/U', $detail_content, $title_data );
- $title = $title_data [1];
- //die($title);
- //获取内容,需要根据不同特点写正则
- preg_match_all ( $content_match, $detail_content, $body_data );
- //die($body_data[2][0]);
- $body = $body_data [2] [0];
- $sql = "INSERT INTO 'get_content'.'articles' ('ID' ,'Title' ,'Click' , 'Content' ,'Date' ,'Category' )VALUES (NULL , '" . $title . "', '', '" . $body . "', now(), '1');";
- $result = mysql_query ( $sql );
- }
- mysql_free_result ( $result );//关闭连接
- mysql_close ( $db );
- ?>
【代码解读】
本章的爬虫程序的执行流程步骤如下:
(1)根据栏目id从数据库中读取对应的规则信息;
(2)通过file_get_contents()函数获得目标页面的内容;
(3)通过preg_match_all()函数获取链接列表,然后循环遍历该列表将所需的信息过滤后归档,存入数据的articles表中。



