php 抓取新浪新闻的程序代码
抓取就是采集了,今天因为我们要做一个实时采集新浪新闻的功能,下面整理了一个非常了得的php 抓取新浪新闻的程序,我们来看看。
首先,需要下载一个simple_html_dom第三方扩展库,具体下载方式和使用详情可以查看:simple_html_dom的使用.
需要环境支持file_get_contents()函数和curl的支持,具体代码如下:
<?php function timingimg($url, $dirname, $interval) { ignore_user_abort(); //浏览器关闭,程序继续执行 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; }
如果大家有更好的建议,欢迎提出来
文章网址:http://www.phprm.com/code/82397.html
随意转载^^但请附上教程地址。