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

三月 06, 2019 | views
Comments 0

抓取就是采集了,今天因为我们要做一个实时采集新浪新闻的功能,下面整理了一个非常了得的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. *参数 $url  新闻列表地址 
  41.  
  42. *参数 $dirname 新闻图片保存路径 
  43.  
  44. * 返回 二维数组  所有新闻记录 
  45.  
  46. */ 
  47.  
  48. function loadimg($url,$dirname){  
  49.  
  50.   set_time_limit(0); 
  51.  
  52.   <a href="/tags.php/include/" target="_blank">include</a>_once('simple_html_dom.php'); 
  53.  
  54.   $ch = curl_init(); 
  55.  
  56.   <a href="/tags.php/curl_setopt/" target="_blank">curl_setopt</a>($ch,CURLOPT_URL,$url); 
  57.  
  58.   curl_setopt($ch,CURLOPT_HEADER,false); 
  59.  
  60.   curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); 
  61.  
  62.   $output = curl_exec($ch); 
  63.  
  64.   curl_close($ch); 
  65.  
  66.   $html = new simple_html_dom(); 
  67.  
  68.   $html->load($output); 
  69.  
  70.   $images = array(); 
  71.  
  72.   $arr = array(); 
  73.  
  74.   <a href="/tags.php/foreach/" target="_blank">foreach</a>($html->find('li  a'as $element){ 
  75. //开源软件:phpfensi.com 
  76.    
  77.  
  78.     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)){ 
  79.  
  80.    array_push($images,$element->href); 
  81.  
  82.   } 
  83.  
  84.  } 
  85.  
  86.   $images = array_unique($images); 
  87.  
  88.     
  89.  
  90.   sort($images); 
  91.  
  92.   for($i=0;$i<10;$i++){  //只抓取10条记录 
  93.  
  94.    $arr[] = getcontent($images[$i],$dirname); 
  95.  
  96.  } 
  97.  
  98.   return $arr;  
  99.  
  100.  
  101.    
  102.  
  103. /** 
  104.  
  105. * 
  106.  
  107. * 
  108.  
  109. * 抓取单个新闻内容 
  110.  
  111. *参数  $url 新闻页面地址 
  112.  
  113. *参数  $dirname 图片保存路径 
  114.  
  115. *返回 一个新闻记录 一维数组 
  116.  
  117. */ 
  118.  
  119. function getcontent($url,$dirname){ 
  120.  
  121.  include_once('simple_html_dom.php'); 
  122.  
  123.  $html = new simple_html_dom(); 
  124.  
  125.  $data = file_get_contents($url); 
  126.  
  127.  $html->load($data);   
  128.  
  129.     $arr = array(); 
  130.  
  131.     foreach($html->find('h1#artibodyTitle'as $element){ 
  132.  
  133.     $arr['title']= @<a href="/tags.php/iconv/" target="_blank">iconv</a>('gbk','utf-8'$element->innertext); 
  134.  
  135.  
  136.    } 
  137.  
  138.    $str = ''
  139.  
  140.    foreach($html->find('div#artibody p'as $element){ 
  141.  
  142.     $str.= $element;       
  143.  
  144.    } 
  145.  
  146.    $arr['content'] = $str
  147.  
  148.    foreach($html->find('div.img_wrapper img'as $element){ 
  149.  
  150.       $arr['alt'] =$element->alt; 
  151.  
  152.       $data = file_get_contents($element->src); 
  153.  
  154.       $info = getimagesize($element->src);//get image information 
  155.  
  156.       switch($info[2]){ 
  157.  
  158.         case 1: 
  159.  
  160.        $str = 'gif'
  161.  
  162.        break
  163.  
  164.         case 2: 
  165.  
  166.        $str = 'jpg'
  167.  
  168.        break
  169.  
  170.         case 3: 
  171.  
  172.        $str = 'png'
  173.  
  174.        break
  175.  
  176.         default
  177.  
  178.        continue
  179.  
  180.        break
  181.  
  182.       } 
  183.  
  184.       $filename = time().rand(1,999999).'.'.$str;  
  185.  
  186.       if(!is_dir($dirname)){ 
  187.  
  188.         mkdir($dirname,0777,true); 
  189.  
  190.       } 
  191.  
  192.       $fp = <a href="/tags.php/fopen/" target="_blank">fopen</a>($dirname.$filename,'w');             
  193.  
  194.       fwrite($fp,$data); 
  195.  
  196.       fclose($fp); 
  197.  
  198.       $arr['img'] = $dirname.$filename
  199.  
  200.         
  201.  
  202.     } 
  203.  
  204.    return $arr
  205.  
  206.  
  207. ?>



zend