首页 > 开发 > PHP > 正文

php 抓取新浪新闻的程序代码

2024-05-04 22:00:13
字体:大 中 小
来源:转载
供稿:网友

抓取就是采集了,今天因为我们要做一个实时采集新浪新闻的功能,下面整理了一个非常了得的php 抓取新浪新闻的程序,我们来看看,首先,需要下载一个simple_html_dom第三方扩展库,具体下载方式和使用详情可以查看:simple_html_dom的使用,需要环境支持file_get_contents()函数和curl的支持,具体代码如下:

  1. <?php  
  2.  
  3. function timingimg($url,$dirname,$interval){ 
  4.  
  5.   ignore_user_abort(); //浏览器关闭,程序继续执行 
  6.  
  7.   set_time_limit(0);//忽略到默认30秒超时 
  8.  
  9.   $interval = emptyempty($interval)?3600:$interval; 
  10.  
  11.   $dirname = emptyempty($dirname)?'news/':$dirname; 
  12.  
  13.   if(emptyempty($url)){ 
  14.  
  15.     die('请输入目标网址!!!'); 
  16.  
  17.   } 
  18.  
  19.   do{ 
  20.  
  21.     $arr = loadimg($url,$dirname); 
  22.  
  23.  return $arr;    //返回抓取内容所保存的路径 
  24.  
  25.  sleep($interval); 
  26.  
  27.  die; 
  28.  
  29.   }while(true); 
  30.  
  31. } 
  32.  
  33.    
  34.  
  35.    
  36.  
  37. /** 
  38.  
  39. *获取所有新闻链接 
  40.  
  41. *参数 $url  新闻列表地址 
  42.  
  43. *参数 $dirname 新闻图片保存路径 
  44.  
  45. * 返回 二维数组  所有新闻记录 
  46.  
  47. */ 
  48.  
  49. function loadimg($url,$dirname){  
  50.  
  51.   set_time_limit(0); 
  52.  
  53.   <a href="/tags.php/include/" target="_blank">include</a>_once('simple_html_dom.php'); 
  54.  
  55.   $ch = curl_init(); 
  56.  
  57.   <a href="/tags.php/curl_setopt/" target="_blank">curl_setopt</a>($ch,CURLOPT_URL,$url); 
  58.  
  59.   curl_setopt($ch,CURLOPT_HEADER,false); 
  60.  
  61.   curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); 
  62.  
  63.   $output = curl_exec($ch); 
  64.  
  65.   curl_close($ch); 
  66.  
  67.   $html = new simple_html_dom(); 
  68.  
  69.   $html->load($output); 
  70.  
  71.   $images = array(); 
  72.  
  73.   $arr = array(); 
  74.  
  75.   <a href="/tags.php/foreach/" target="_blank">foreach</a>($html->find('li  a') as $element){ 
  76. //开源软件:Vevb.com 
  77.    
  78.  
  79.     if( <a href="/tags.php/preg_match/" target="_blank">preg_match</a>('#^http:////tech/.sina/.com/.cn//it//[/d]{4}/-[/d]{1,2}/-[/d]{1,2}//[/d]+/.shtml$#i',$element->href)){ 
  80.  
  81.    array_push($images,$element->href); 
  82.  
  83.   } 
  84.  
  85.  } 
  86.  
  87.   $images = array_unique($images); 
  88.  
  89.     
  90.  
  91.   sort($images); 
  92.  
  93.   for($i=0;$i<10;$i++){  //只抓取10条记录 
  94.  
  95.    $arr[] = getcontent($images[$i],$dirname); 
  96.  
  97.  } 
  98.  
  99.   return $arr;  
  100.  
  101. } 
  102.  
  103.    
  104.  
  105. /** 
  106.  
  107. * 
  108.  
  109. * 
  110.  
  111. * 抓取单个新闻内容 
  112.  
  113. *参数  $url 新闻页面地址 
  114.  
  115. *参数  $dirname 图片保存路径 
  116.  
  117. *返回 一个新闻记录 一维数组 
  118.  
  119. */ 
  120.  
  121. function getcontent($url,$dirname){ 
  122.  
  123.  include_once('simple_html_dom.php'); 
  124.  
  125.  $html = new simple_html_dom(); 
  126.  
  127.  $data = file_get_contents($url); 
  128.  
  129.  $html->load($data);   
  130.  
  131.     $arr = array(); 
  132.  
  133.     foreach($html->find('h1#artibodyTitle') as $element){ 
  134.  
  135.     $arr['title']= @<a href="/tags.php/iconv/" target="_blank">iconv</a>('gbk','utf-8', $element->innertext); 
  136.  
  137. ; 
  138.  
  139.    } 
  140.  
  141.    $str = ''; 
  142.  
  143.    foreach($html->find('div#artibody p') as $element){ 
  144.  
  145.     $str.= $element;       
  146.  
  147.    } 
  148.  
  149.    $arr['content'] = $str; 
  150.  
  151.    foreach($html->find('div.img_wrapper img') as $element){ 
  152.  
  153.       $arr['alt'] =$element->alt; 
  154.  
  155.       $data = file_get_contents($element->src); 
  156.  
  157.       $info = getimagesize($element->src);//get image information 
  158.  
  159.       switch($info[2]){ 
  160.  
  161.         case 1: 
  162.  
  163.        $str = 'gif'; 
  164.  
  165.        break; 
  166.  
  167.         case 2: 
  168.  
  169.        $str = 'jpg'; 
  170.  
  171.        break; 
  172.  
  173.         case 3: 
  174.  
  175.        $str = 'png'; 
  176.  
  177.        break; 
  178.  
  179.         default: 
  180.  
  181.        continue; 
  182.  
  183.        break; 
  184.  
  185.       } 
  186.  
  187.       $filename = time().rand(1,999999).'.'.$str;  
  188.  
  189.       if(!is_dir($dirname)){ 
  190.  
  191.         mkdir($dirname,0777,true); 
  192.  
  193.       } 
  194.  
  195.       $fp = <a href="/tags.php/fopen/" target="_blank">fopen</a>($dirname.$filename,'w');             
  196.  
  197.       fwrite($fp,$data); 
  198.  
  199.       fclose($fp); 
  200.  
  201.       $arr['img'] = $dirname.$filename; 
  202.  
  203.         
  204.  
  205.     } 
  206.  
  207.    return $arr; 
  208.  
  209. } 
  210.  
  211. ?>

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表