国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

PHP純手寫正則爬取星座屋網站星座運勢數據

honhon / 1651人閱讀

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

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

最終爬取數據結果展示在APP上的效果:

下面就是使用正則實現的代碼,是自己一年多前花了半天時間寫的。現在想來,如果使用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);//轉換編碼 $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 = "";//寫入狀態 默認為空表示不寫入 $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); //判斷緩存時間是否在當天內產生 $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"] = "數據抓取失敗!"; $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"] = "數據抓取失敗!"; $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

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/28387.html

相關文章

  • PHP手寫正則爬取星座網站星座運勢數據

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

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

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

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

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

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

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

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

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

    Tony 評論0 收藏0

發表評論

0條評論

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