成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

PHP純手寫正則爬取星座屋網(wǎng)站星座運勢數(shù)據(jù)

honhon / 1660人閱讀

摘要:星座屋運勢界面最終爬取數(shù)據(jù)結(jié)果展示在上的效果下面就是使用正則實現(xiàn)的代碼,是自己一年多前花了半天時間寫的。

星座屋(http://www.xzw.com/fortune/)運勢界面:

最終爬取數(shù)據(jù)結(jié)果展示在APP上的效果:

下面就是使用正則實現(xiàn)的代碼,是自己一年多前花了半天時間寫的?,F(xiàn)在想來,如果使用Scrapy或者phpspider只用幾行代碼就搞定了,不用這么費力氣了~

 array("aries", "03/21-04/19"),
        "金牛座" => array("taurus", "04/20-05/20"),
        "雙子座" => array("gemini", "05/21-06/21"),
        "巨蟹座" => array("cancer", "06/22-07/22"),
        "獅子座" => array("leo", "07/23-08/22"),
        "處女座" => array("virgo", "08/23-09/22"),
        "天秤座" => array("libra", "09/23-10/23"),
        "天蝎座" => array("scorpio", "10/24-11/22"),
        "射手座" => array("sagittarius", "11/23-12/21"),
        "魔羯座" => array("capricorn", "12/22-01/19"),
        "水瓶座" => array("aquarius", "01/20-02/18"),
        "雙魚座" => array("pisces", "02/19-03/20")
);*/

$constellation = isset($_REQUEST["xingzuo"]) && !empty($_REQUEST["xingzuo"]) ? trim($_REQUEST["xingzuo"]) : null;
$category = isset($_REQUEST["category"]) && !empty($_REQUEST["category"]) ? intval($_REQUEST["category"]) : null;

$all_xingzuo = array(
    "aries",
    "taurus",
    "gemini",
    "cancer",
    "leo",
    "virgo",
    "libra",
    "scorpio",
    "sagittarius",
    "capricorn",
    "aquarius",
    "pisces"
    );
$all_category = array(0,1,2,3,4,5);
if(!in_array($constellation, $all_xingzuo) || !in_array($category, $all_category)){
    exit("Params error");
}

$domain = "http://www.xzw.com/fortune/";
$apiUrl = "";
if($category){
    $apiUrl = $domain.$constellation."/".$category.".html";
} else {
    $apiUrl = $domain.$constellation."/";
}

header("Content-type: text/html; charset=utf-8");
function getFortuneData($url){
    $fortune_data = array();
    $data = file_get_contents($url);
    $data = mb_convert_encoding($data, "utf-8", "gbk");
    preg_match("/
(.*)
/ism", $data, $div_c_main); preg_match("/
(.*?)
/ism", $div_c_main[1], $dl); preg_match("/
(.*?)
/ism", $dl[1], $dd); preg_match("/
    (.*?)
/ism", $dd[1], $ul); $ul = str_replace("/ism", "", $ul); $ul = preg_replace("//ism", "", $ul); //$ul = preg_replace("/s+/","",$ul); $ul_arr = explode("{label}", $ul); array_shift($ul_arr); foreach ($ul_arr as $key => &$li) { //preg_match_all("/([x81-xfe][x40-xfe])+/", $li, $matches);//轉(zhuǎn)換編碼 $matches[1][0]表示":" preg_match("//ism", $li, $width); if(!empty($width)){ $li = explode(":",$li); $li["label"] = preg_replace("/]*?>/ism", "", $li[0]); $li["value"] = sprintf("%0.2f", floatval($width[1]/80)); unset($li[0]); unset($li[1]); //$val[1] = $width[1]/16; } else { $li = explode(":",$li); $li["label"] = $li[0]; $li["value"] = $li[1]; unset($li[0]); unset($li[1]); } } $fortune_data["ul"] = $ul_arr; //獲取c_cont preg_match("/
(.*?)
/ism", $data, $cont); $p_cont = preg_replace("/]*?>/ism", "", $cont[1]); $p_cont = str_replace("", "{span}", $p_cont); $p_cont = str_replace("

", "{p}", $p_cont); $p_cont = preg_replace(""<[/!]*?[^<>]*?>"si","",$p_cont); $p_cont = preg_replace("/s+/","",$p_cont); //$p_cont = preg_replace(""([rn])[s]+"","",$p_cont); $p_cont = str_replace("

", "", $p_cont); $p_cont_arr = explode("{p}",$p_cont); array_shift($p_cont_arr); foreach ($p_cont_arr as $key => $val) { $temp = explode("{span}", $val); $temp_arr["label"] = $temp[0]; $temp_arr["value"] = $temp[1]; $fortune_data["cont"][] = $temp_arr; unset($temp); } return $fortune_data; } $write_result = "";//寫入狀態(tài) 默認為空表示不寫入 $local_data = ""; $result = array(); $fileName = !empty($category) ? $constellation."-".$category.".php" : $constellation.".php"; $fortune_data_path = "fortune_data/".$fileName; if(file_exists($fortune_data_path)){ $local_data = @file_get_contents("fortune_data/".$fileName); } if (!empty($local_data)) { $filemtime = filemtime($fortune_data_path); //判斷緩存時間是否在當(dāng)天內(nèi)產(chǎn)生 $todayStart = mktime(0, 0, 0, date("m"), date("d"), date("Y")); if($filemtime < $todayStart){ //緩存過期 $data = getFortuneData($apiUrl); $write_result = write_fortune_cache($data, $fileName); if(empty($data)){ $result["result"] = -1; $result["msg"] = "數(shù)據(jù)抓取失?。?; $result["write_result"] = $write_result; $result["data"] = array(); exit($json->encode($result)); } } else { $data = unserialize($local_data); } $result["result"] = 0; $result["msg"] = "success"; $result["write_result"] = $write_result; $result["data"] = $data; exit($json->encode($result)); } else { $data = getFortuneData($apiUrl); if(!empty($data)){ $write_result = write_fortune_cache($data, $fileName); $result["result"] = 0; $result["msg"] = "success"; $result["write_result"] = $write_result; $result["data"] = $data; exit($json->encode($result)); } else { $result["result"] = -1; $result["msg"] = "數(shù)據(jù)抓取失?。?; $result["write_result"] = $write_result; $result["data"] = array(); exit($json->encode($result)); } } function write_fortune_cache($data, $fileName){ $fp = fopen("./fortune_data/".$fileName, "w+") or die("fortune_data/".$fileName."不存在!"); $fw = fwrite($fp, serialize($data)); if($fw){ $write_result = "success"; } else { $write_result = "fail"; } fclose($fp); return $write_result; } ?>

End

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/28387.html

相關(guān)文章

  • PHP手寫正則爬取星座網(wǎng)站星座運勢數(shù)據(jù)

    摘要:星座屋運勢界面最終爬取數(shù)據(jù)結(jié)果展示在上的效果下面就是使用正則實現(xiàn)的代碼,是自己一年多前花了半天時間寫的。 星座屋(http://www.xzw.com/fortune/)運勢界面:showImg(https://segmentfault.com/img/bV5Qou?w=693&h=518); 最終爬取數(shù)據(jù)結(jié)果展示在APP上的效果:showImg(https://segmentfaul...

    golden_hamster 評論0 收藏0
  • 持續(xù)更新免費的API,做一個API的搬運工

    摘要:為了方便廣大的開發(fā)者,特此統(tǒng)計了網(wǎng)上諸多的免費,為您收集免費的接口服務(wù),做一個的搬運工,以后會每月定時更新新的接口。將長段中文切詞分開。 為了方便廣大的開發(fā)者,特此統(tǒng)計了網(wǎng)上諸多的免費API,為您收集免費的接口服務(wù),做一個api的搬運工,以后會每月定時更新新的接口。有些接口來自第三方,在第三方注冊就可以成為他們的會員,免費使用他們的部分接口。 百度AccessToken:針對HTTP ...

    Shihira 評論0 收藏0
  • Java 正則表達式

    摘要:正則表達式是從字符串最頭部開始匹配,一直到結(jié)束,需要匹配整個串匹配的時候返回包含正則匹配的串為找到所有匹配的串代表整個表達式星座運勢匹配創(chuàng)建對象現(xiàn)在創(chuàng)建對象星座運勢星座運勢參考資料 Java 正則表達式 java.util.regex.Pattern java.util.regex.Matcher Match match 是從字符串最頭部開始匹配,一直到結(jié)束,需要匹配整個串 Strin...

    zebrayoung 評論0 收藏0
  • 用Python爬取了幾千條相親文案,終于發(fā)現(xiàn)了告別單身的秘密

    摘要:寫在最后近年來,隨著人們思想觀念的改變,相親也逐漸得到年輕人的接受與認可,特別是對于那些圈子比較窄,接觸不到異性的人而言。 前不久,小編刷到這樣一條短視頻,1.7億...

    keke 評論0 收藏0
  • 用JAVA做一個爬蟲程序——Gecco

    摘要:是一個開源的簡單的爬蟲框架主要是通過將獲取的網(wǎng)頁信息封裝成來進行爬取信息。作者也是一個新手。這篇文章只是提供一個入門的思路。開啟多少個線程抓取隔多長時間抓取次部分。是用來抓取元素的連接是指獲取得到的內(nèi)容。并且這個類需要實現(xiàn)。 Gecco是一個開源的簡單的java爬蟲框架主要是通過將獲取的網(wǎng)頁信息封裝成HtmlBean來進行爬取信息。作者也是一個新手。這篇文章只是提供一個入門的思路。如果...

    Tony 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<