国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

如何讓你的站跟新浪的新聞數據保持同步

2024-05-04 21:52:33
字體:
來源:轉載
供稿:網友

采集已經不是什么新名詞了,很多站長為了省事,也局限于人力的缺乏,使用程序來給自己的網站添磚加瓦,比如本人的個人網站www.xxfsw.com也采集了大量的新聞,那么如果實現呢?今天我們運用php來實現這個功能。

談到采集,我們不得不說兩個東西,第一個是如何獲取遠程網站的源代碼,這個可以通過php的一個擴展curl來獲取,另一個是如果去匹配你需要的信息,這個的解決辦法是正則表達式。

Windows下開啟curl的方法如下:

1、拷貝PHP目錄中的libeay32.dll, ssleay32.dll, php5ts.dll, php_curl.dll文件到 system32 目錄。

2、修改php.ini:配置好 extension_dir ,去掉 extension = php_curl.dll 前面的分號。

3、重起apache。

Linux下開啟curl的方法如下:

進入安裝 原php 的源碼目錄,

cd ext
cd curl
phpize
./configure --with-curl =DIR
make

就會在PHPDIR/ext/curl /moudles/下生成curl .so的文件。

復制curl .so文件到extensions的配置目錄,修改php .ini就好了。

然后你就可以利用curl來獲取到指定url的網頁源碼了,這里給大家一個封裝好的函數:

以下為引用的內容:
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;
}

接下來就應該說到php中的正則表達式了:

1.中括號

[0-9]匹配0-9

[a-z]匹配a-z小寫字母

[A-Z]匹配A-Z大寫字母

[a-zA-Z]匹配所有大小寫字母

可以使用ascii來制定更多

2.量詞

以下為引用的內容:
p+匹配至少一個含p的字符串 
p*陪陪任何包含0個或多個p的字符串 
p?匹配任何包含0個或一個p的字符串 
p{2}匹配包含2個p的序列的字符串 
p{2,3}匹配任何包含2個或3個的字符串 
p$匹配任何以p結尾的字符串 
^p匹配任何以p開頭的字符串 
[^a-zA-Z]匹配任何不包含a-zA-Z的字符串 
p.p匹配任何包含p、接下來是任何字符、再接下來有又是p的字符串 
^.{2}$匹配任何值包含2個字符的字符串 
<b>(.*)b>匹配任何被<b>>包圍的字符串 
p(hp)*匹配任何一個包含p,后面是多個或0個hp的字符串

3.預定義字符范圍

以下為引用的內容:
[:alpha:]同[a-zA-Z] 
[:alnum:]同[a-zA-Z0-9] 
[:cntrl:]匹配控制字符,比如制表符,反斜杠,退格符 
[:digit:]同[0-9] 
[:graph:]所有ASCII33~166范圍內可以打印的字符 
[:lower:]同[a-z] 
[:punct:]標點符號 
[:upper:]同[A-Z] 
[:space:]空白字符,可以是空格、水平制表符、換行、換頁、回車 
[:xdigit:]十六進制符同[a-fA-F0-9]

廢話不多說,直接上我的源碼吧,有什么不懂的可以上百度查查。

以下為引用的內容:
<?php
header("Content-type: text/html; charset=utf-8");
getinfo("http://rss.sina.com.cn/rollnews/news/gn_total.js",1);
getinfo("http://rss.sina.com.cn/rollnews/news/gj_total.js",2);
getinfo("http://rss.sina.com.cn/rollnews/news/sh_total.js",3);
getinfo("http://rss.sina.com.cn/rollnews/sports/sports_total.js",4);
getinfo("http://rss.sina.com.cn/rollnews/tech/tech1_total.js",5);
getinfo("http://rss.sina.com.cn/rollnews/finance/finance1_news_total.js",6);
getinfo("http://rss.sina.com.cn/rollnews/ent/ent_total.js",7);
getinfo("http://rss.sina.com.cn/rollnews/jczs/jczs_total.js",8);
function getinfo($infourl,$catid)
{
    $pagecontent=getwebcontent($infourl);
    preg_match_all("/title:/"(.*?)/"/", $pagecontent, $match);
    $titlearr=$match[1];
    preg_match_all("/link:/"(.*?)/"/", $pagecontent, $match);
    $urlarr=$match[1];
    for ($i=1;$i<count($urlarr);$i++){
        echo "go {$titlearr[$i-1]}/n";
        $title=iconv("gbk","utf-8",$titlearr[$i-1]);
        $content=iconv("gbk","utf-8",getnewscontent($urlarr[$i]));
        $content=mysql_escape_string($content);
        if(!insertdb($title,$content,$catid)) break;
    }
}
function insertdb($title,$content,$catid){   
    將數據寫入你的庫
}
function getnewscontent($newsurl){
    $newscontent=getwebcontent($newsurl);
    preg_match_all("/<div class=/"blkContainerSblkCon/" id=/"artibody/">([/s/S]*?)<!-- publish_helper_end -->/",$newscontent,$match);
    $content=preg_replace("/<a.*?<//a>/si","",$match[1][0]);
    $content=preg_replace("/<div style=/"overflow:hidden;zoom:1;/" class=/"otherContent_01/">.*?<//div>/si","",$content);
    $content=preg_replace("/<div class=/"blk-video/">.*?<div class=/"clearcl/"><//div>/si","",$content);
    $content=str_replace("<div style=/"clear:both;height:0;visibility:hiddden;overflow:hidden;/"></div>","",$content);
    return $content;
}
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;
}
?>

然后如何實現比較實時的同步呢,這可以利用windows下的任務計劃或linux下的crontab 了,定時(比如十分鐘)執行這個程序,這樣,你就不再愁網站沒有內容了。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 景宁| 上饶市| 瓮安县| 德兴市| 徐汇区| 武义县| 乌苏市| 雅江县| 沁源县| 宜丰县| 焉耆| 浦城县| 无棣县| 宁南县| 自贡市| 南丹县| 广昌县| 疏勒县| 武穴市| 稷山县| 德安县| 汝州市| 防城港市| 德庆县| 延长县| 临沭县| 且末县| 金乡县| 平山县| 新宁县| 祁门县| 合肥市| 乾安县| 赞皇县| 九龙城区| 屏南县| 都匀市| 玛纳斯县| 本溪市| 和林格尔县| 城固县|