首页 > php代码 > php 抓取新浪新闻的程序代码

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

随意转载^^但请附上教程地址。

标签:iconv foreach include preg_match fopen curl_setopt

相关文章

发表留言