php採集遠端文章簡單類

suboysugar發表於2015-07-16
<?php
/**
 * 採集類
 * @author Milkcy 
 * @copyright            (C) 2012-2015 TCCMS.COM
 * @lastmodify             2012-07-10 14:00
 */
class gather {

    public $pagestring = ``;
    private $db;

    function __construct() {
        global $db;
        $this->db = $db;
    }

    function geturlfile($url) {
        $url = trim($url);
        $content = ``;
        if (extension_loaded(`curl`)) {
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
            curl_setopt($ch, CURLOPT_HEADER, 0);
            $content = curl_exec($ch);
            curl_close($ch);
        } else {
            $content = file_get_contents($url);
        }
        return trim($content);
    }

    function get_all_url($code) {
        preg_match_all(`/<a.+?href=["|\`]?([^>"\` ]+)["|\`]?\s*[^>]*>([^>]+)<\/a>/is`, $code, $arr);
        return array(`name` => $arr[2], `url` => $arr[1]);
    }

    function get_sub_content($str, $start, $end) {
        $start = trim($start);
        $end = trim($end);
        if ($start == `` || $end == ``) {
            return $str;
        }
        $str = explode($start, $str);
        $str = explode($end, $str[1]);
        return $str[0];
    }

    function vd($var) {
        echo "<div style=\"border:1px solid #ddd;background:#F7F7F7;padding:5px 10px;\">\r\n";
        echo "<pre style=\"font-family:Arial,Vrinda;font-size:14px;\">\r\n";
        var_dump($var);
        echo "\r\n</pre>\r\n";
        echo "</div>";
    }

}

?>

<?php
define(`ROOT_PATH`, str_replace(`\\`, `/`, dirname(__FILE__)));
include ROOT_PATH."/gather.class.php";
set_time_limit(0);
header("Content-type: text/html; charset=gb2312");
//目標網址
$url = `http://news.163.com/special/00013C0O/guojibjtj_03.html`;
//例項化採集機器
$gather = new gather();
//獲取目標網址HTML
$html = $gather->geturlfile($url);
//定義採集列表區間
$start = `<div class="bd clearfix">`;
$end = `<div class="pages-1 mt25">`;
//獲取區間內的文章URL和TITLE
$code = $gather->get_sub_content($html, $start, $end);
$newsAry = $gather->get_all_url($code);
//列印出結果
//$gather->vd($newsAry);
$tarGetUrl = $newsAry[`url`][0];
//獲取目標網址HTML
$html = $gather->geturlfile($tarGetUrl);
//定義採集列表區間
$start = `<div id="endText">`;
$end = `<span class="cDGray right" style="white-space:nowrap;">`;
//獲取區間內的文章URL和TITLE
$code = $gather->get_sub_content($html, $start, $end);
$killHtml = `<iframe src="http://g.163.com/r?site=netease&affiliate=news&cat=article&type=tvscreen200x300&location=1" width="200" height="300" frameborder="no" border="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>`;
$killHtml2 = `<a href="http://news.163.com/"><img src="http://img1.cache.netease.com/cnews/img07/end_i.gif" alt="netease" width="12" height="11" border="0" class="icon" /></a>`;
$code = str_replace($killHtml, "", $code);
$code = str_replace($killHtml2, "", $code);
$gather->vd($code);
?>
//該片段來自於http://outofmemory.cn

 

 

php 文章採集正則程式碼

//採集html 
function getwebcontent($url){ 
$ch = curl_init(); 
$timeout = 10; 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); 
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1); 
$contents = trim(curl_exec($ch)); 
curl_close($ch); 
return $contents; 
} 


//獲得標題和url 
$string = 
getwebcontent(`http://www.***.com/learn/zhunbeihuaiyun/jijibeiyun/2`); 
//正則匹配<li>獲取標題和地址 
preg_match_all ("/<li><a href="/learn/article/(.*)">(.*)</a>/",$string, $out, PREG_SET_ORDER);
foreach($out as $key => $value){ 
$article[`title`][] = $out[$key][2]; 
$article[`link`][] = "http://www.***.com/learn/article/".$out[$key][1]; 
} 
//根據url獲取文章內容 
foreach($article[`link`] as $key=>$value){ 
$content_html = getwebcontent($article[`link`][$key]); 
preg_match("/<div id=pagenum_0(.*)>[s|S]*?</div>/",$content_html,$matches); 
$article[content][$key] = $matches[0]; 

} 
//不轉碼還真不能儲存成檔案 
foreach($article[title] as $key=>$value){ 
$article[title][$key] = iconv(`utf-8`, `gbk`, $value);//轉碼 
} 
//存入檔案 
$num = count($article[`title`]); 
for($i=0; $i<$num; $i++){ 
file_put_contents("{$article[title][$i]}.txt", $article[`content`][$i]); 
} 
?> 

 

如何聯絡我:【萬里虎】www.bravetiger.cn
【QQ】3396726884 (諮詢問題100元起,幫助解決問題500元起)
【部落格】http://www.cnblogs.com/kenshinobiy/


相關文章