[phpstudy]php 抓取新浪新闻的程序代码

时间:2019-10-16  来源:php函数  阅读:


首先,需要下载一个simple_html_dom第三方扩展库,具体下载方式和使用详情可以查看:simple_html_dom的使用.

需要环境支持file_get_contents()函数和curl的支持,具体代码如下:

浏览器关闭,程序继续执行

  set_time_limit(0);//忽略到默认30秒超时

  $interval = empty($interval)?3600:$interval;

  $dirname = empty($dirname)?'news/':$dirname;

  if(empty($url)){

    die('请输入目标网址!!!');

  }

  do{

    $arr = loadimg($url,$dirname);

 return $arr;    //返回抓取内容所保存的路径

 sleep($interval);

 die;

  }while(true);

}

 

 

/**

*获取所有新闻链接

*参数 $url  新闻列表地址

*参数 $dirname 新闻图片保存路径

* 返回 二维数组  所有新闻记录

*/

function loadimg($url,$dirname){ 

  set_time_limit(0);

  include_once('simple_html_dom.php');

  $ch = curl_init();

  curl_setopt($ch,CURLOPT_URL,$url);

  curl_setopt($ch,CURLOPT_HEADER,false);

  curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);

  $output = curl_exec($ch);

  curl_close($ch);

  $html = new simple_html_dom();

  $html->load($output);

  $images = array();

  $arr = array();

  foreach($html->find('li  a') as $element){

 

    if( preg_match('#^http:\\/\\/tech\\.sina\\.com\\.cn\\/it\\/[\\d]{4}\\-[\\d]{1,2}\\-[\\d]{1,2}\\/[\\d]+\\.shtml$#i',$element->href)){

   array_push($images,$element->href);

  }

 }

  $images = array_unique($images);

  

  sort($images);

  for($i=0;$i<10;$i++){  //只抓取10条记录

   $arr[] = getcontent($images[$i],$dirname);

 }

  return $arr; 

}

 

/**

*

*

* 抓取单个新闻内容

*参数  $url 新闻页面地址

*参数  $dirname 图片保存路径

*返回 一个新闻记录 一维数组

*/

function getcontent($url,$dirname){

 include_once('simple_html_dom.php');

 $html = new simple_html_dom();

 $data = file_get_contents($url);

 $html->load($data);  

    $arr = array();

    foreach($html->find('h1#artibodyTitle') as $element){

    $arr['title']= @iconv('gbk','utf-8', $element->innertext);

;

   }

   $str = '';

   foreach($html->find('div#artibody p') as $element){

    $str.= $element;      

   }

   $arr['content'] = $str;

   foreach($html->find('div.img_wrapper img') as $element){

      $arr['alt'] =$element->alt;

      $data = file_get_contents($element->src);

      $info = getimagesize($element->src);//get image information

      switch($info[2]){

        case 1:

       $str = 'gif';

       break;

        case 2:

       $str = 'jpg';

       break;

        case 3:

       $str = 'png';

       break;

        default:

       continue;

       break;

      }

      $filename = time().rand(1,999999).'.'.$str; 

      if(!is_dir($dirname)){

        mkdir($dirname,0777,true);

      }

      $fp = fopen($dirname.$filename,'w');            

      fwrite($fp,$data);

      fclose($fp);

      $arr['img'] = $dirname.$filename;

      

    }

   return $arr;

}

?>

如果大家有更好的建议,欢迎提出来

[phpstudy]php 抓取新浪新闻的程序代码

http://m.bbyears.com/jiaocheng/73543.html

推荐访问:phpstorm php面试题 php数组转字符串 php教程
相关阅读 猜你喜欢
本类排行 本类最新