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
随意转载^^但请附上教程地址。