0 Comments

爬虫程序

发布于:2012-11-21  |   作者:广州网站建设  |   已聚集:人围观
 爬虫程序

爬虫程序即信息采集程序(spiders.php),通过前几节介绍,读者应该已经对爬虫程序的实现原理有了直观的了解,同时也有了一个爬虫程序的基本模型。下面继续完善这个框架程序的业务流程(如添加信息入库等部分内容)。在完善该程序之前,需要给采集器一个启动的入口,这里设定当采集器规则定制完成后就可以开始采集信息了。打开manage.php这个文件找到如下代码:广州网站设计


  1. <td colspan="2" align="center"><input name="Submit" type="submit" 
  2.     class="btn" value="提交" /> <input name="Submit" type="button" 
  3.     class="btn" value="返回" onclick="history.go(-1);" /> 
  4. </td> 

 

将上述代码修改为:
广州网站设计
  1. <td colspan="2" align="center"><input name="Submit" type="submit" 
  2.     class="btn" value="规则提交" /> <input name="Submit" type="button" 
  3.     class="btn" value="开始采集" onclick="loadS1()"> 
  4. </td> 

【代码解读】

可以看到,当单击"开始采集"按钮后将触发loadS1()这个JavaScript函数,它的功能就是运营采集程序spiders.php。

下面介绍具体的函数。添加loadS1()到manage.php文件中,loadS1()的代码如下:

广州网站建设
  1. function loadS1()  
  2. {  
  3.  window.open ('spiders.php?cid=1')   
  4. }  

 

其中,cid=1的意思是加载栏目id为1的规则开始采集。下面来看具体的spiders.php程序的代码实现:
广州网站建设
  1. <?php 
  2. //============================  
  3. //  说明: 网页采集器程序  
  4. //============================  
  5. //获得栏目id  
  6. $Category = $_GET ['cid'];  
  7. if ($Category) {  
  8.     $con = mysql_connect ( 'localhost', 'root', '198251' ) or die ( 'Could  not connect: ' . mysql_error () );  
  9.     mysql_query ( "set names gb2312" );  
  10.     //echo 'Connected successfully';  
  11.     $db = mysql_select_db ( 'get_content', $con );  
  12.     if (! $db) {  
  13.         die ( "Can\'t use download : " . mysql_error () );  
  14.     } else {  
  15.         //获得提取规则数组  
  16.         $sql = "SELECT * FROM 'spiders' WHERE 'Category'='" . $Category . "' ";  
  17.         $result = mysql_query ( $sql, $con );  
  18.         $row = mysql_fetch_row ( $result );  
  19.         //var_dump ($row);  
  20.         if (! $result) {  
  21.             mysql_free_result ( $result );          //释放结果集  
  22.         }  
  23.     }  
  24. } else {  
  25.     exit ( "出错了:(" );  
  26. }  
  27. $list_url = $row [5];//待获取页面的地址  
  28. $list_content = file_get_contents ( $list_url );    //获取链接列表  
  29. //var_dump ($list_content);  
  30. //观察链接特征:<li> <a href="/news/2010-05-21/1705605024_4.shtml" title="自主的胜利?" target="_blank" class="fl">自主的胜利?</a><i> 
  31. $list_match = $row [2];//获取列表正则规则  
  32. $content_match = $row [3];//获得文章内容正则规则  
  33. preg_match_all ( $list_match, $list_content, $list_data );  
  34. $i = 0;  
  35. //获取到了一个链接列表  
  36. //print_r($list_data[1]);  
  37. foreach ( $list_data [1] as $detail_url ) {  
  38.     //处理一下,如果已经抓取过了,就跳过去  
  39.     $detail_content = file_get_contents ( "http://auto.sina.com.cn" .   $detail_url );  
  40.     //echo ($i++);  
  41.     //获取标题  
  42.     preg_match ( '/<h1 id="artibodyTitle".+?>(.+?)<\/h1>/U', $detail_content,   $title_data );  
  43.     $title = $title_data [1];  
  44.     //die($title);  
  45.     //获取内容,需要根据不同特点写正则  
  46.     preg_match_all ( $content_match, $detail_content, $body_data );  
  47.     //die($body_data[2][0]);  
  48.     $body = $body_data [2] [0];  
  49.     $sql = "INSERT INTO 'get_content'.'articles' ('ID' ,'Title' ,'Click' ,  'Content' ,'Date' ,'Category' )VALUES (NULL , '" . $title . "', '', '" .    $body . "', now(), '1');";  
  50.     $result = mysql_query ( $sql );  
  51. }  
  52. mysql_free_result ( $result );//关闭连接  
  53. mysql_close ( $db );  
  54. ?> 

【代码解读】

本章的爬虫程序的执行流程步骤如下:

(1)根据栏目id从数据库中读取对应的规则信息;

(2)通过file_get_contents()函数获得目标页面的内容;

(3)通过preg_match_all()函数获取链接列表,然后循环遍历该列表将所需的信息过滤后归档,存入数据的articles表中。

标签:
飞机