摘要:以下是我操作的具體代碼釋放資源對(duì)象,會(huì)很占用內(nèi)存最后我們得到的數(shù)據(jù)結(jié)構(gòu)如下前端的話,用的很亂,妹子都用了,正真的放一些代碼吧每一項(xiàng)都要填寫未查詢到成績(jī)?cè)僭囋嚢煞?wù)器開小差啦稍后再試
1、線上demo
http://demo.blueyian.top/mara...
完整的代碼包請(qǐng)上gayhub取用。覺得有用的可以給個(gè)star :)
地址:https://github.com/KongYian/m...
我們的目標(biāo)是http://www.runchina.org.cn/po... 因此先來分析一下此網(wǎng)站是如何實(shí)現(xiàn)成績(jī)查詢。
多嘗試輸入幾次自己的查詢信息,打開F12觀察NetWork和Application里面的數(shù)據(jù),我們可以簡(jiǎn)單的判斷出查詢的大致流程如下圖:
在反復(fù)試驗(yàn)的過程和檢查中,我們會(huì)發(fā)現(xiàn)這個(gè)網(wǎng)站木有什么CRSF等保護(hù),除了一個(gè)+-*/的驗(yàn)證碼,其他就是一個(gè)赤裸裸的接口了。
在實(shí)際做的過程中,我將第一步和第二步放在一起作為了一個(gè)接口(命名為-- 接口1)。獲取驗(yàn)證碼圖片和PHPSESSIONID,代碼如下:
其中關(guān)鍵操作在代碼注釋中--
.*)/",$line,$sessionArr); fclose($handle); $session = trimall($sessionArr["right"]," "); $sessionString = "PHPSESSID=".$session.";"; $res = curlLogin($query_url,$cookie_file,$sessionString); preg_match_all("/Set-Cookie:(.*);/iU",$res,$out); $tmp = implode(";",$out[1]); $cookieString = $sessionString.$tmp; //此變量圍第二次請(qǐng)求使用的cookie值 echo json_encode(["data"=>$cookieString]); exit; function trimall($str)//刪除空格 { $oldchar=array(" "," "," "," "," "); $newchar=array("","","","",""); return str_replace($oldchar,$newchar,$str); } function showAuthcode( $authcode_url,$cookieFile) { $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $authcode_url); curl_setopt($curl, CURLOPT_COOKIEJAR, $cookieFile); //將獲取的cookie以文件的形式保存 curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36"); curl_setopt($curl, CURLOPT_HEADER, 0); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $img = curl_exec($curl); curl_close($curl); $fp = fopen("../image/verifyCode.jpg","w"); //獲取驗(yàn)證碼的圖片 fwrite($fp,$img); fclose($fp); } function curlLogin($url,$cookiefile,$session) { $headers = [ "Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8", "Accept-Encoding:gzip, deflate", "Accept-Language:zh-CN,zh;q=0.9", "Connection:keep-alive", "Cookie:".$session, "Host:www.runchina.org.cn", "Upgrade-Insecure-Requests:1", "User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36", ]; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_ACCEPT_ENCODING, "gzip, deflate, sdch"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0"); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); curl_setopt($ch, CURLOPT_COOKIEFILE, $cookiefile); //用請(qǐng)求驗(yàn)證碼接口獲取的cookie作為本次請(qǐng)求的set-cookie 獲取新的cookie文件,但是這里我們沒有以文件形式存儲(chǔ)而是直接輸出,這樣避免了多次文件IO的消耗。 curl_setopt($ch, CURLOPT_NOBODY, true); curl_setopt($ch, CURLOPT_HEADER, true); $contents = curl_exec($ch); curl_close($ch); return $contents; }
我們從接口一獲取到了要用的cookieString和驗(yàn)證碼的圖片,下面就來模擬表單提交了,模擬提交的代碼如下:
$query_url = "http://www.runchina.org.cn/portal.php?mod=score&ac=personal"; $idnum = $_POST["idnum"]; $name = $_POST["name"]; $code = $_POST["code"]; $cookie = $_POST["cookie"]; $params = [ "idnum"=>$idnum, "name"=>$name, "captcha_code"=>$code ]; $https = query($query_url,$params,$cookie); function query($query_url,$params,$cookie){ $headers = [ "Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8", "Accept-Encoding:gzip, deflate", "Accept-Language:zh-CN,zh;q=0.9", "Connection:keep-alive", "Cookie:".$cookie, "Host:www.runchina.org.cn", "Upgrade-Insecure-Requests:1", "User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36", ]; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $query_url); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); curl_setopt($ch, CURLOPT_TIMEOUT, 30); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); $resp = curl_exec($ch); curl_close($ch); return $resp; } function trimall($str)//刪除空格 { $oldchar=array(" "," "," "," "," "); $newchar=array("","","","",""); return str_replace($oldchar,$newchar,$str); }
變量$https便是我們請(qǐng)求的結(jié)果了,如果正確的話是一個(gè)結(jié)果頁面,如果沒有數(shù)據(jù)或者出錯(cuò)的話則沒有數(shù)據(jù)了。
拿到頁面之后,我們就可以來操作dom了,這里我用的是‘simple_html_dom’,具體如何食用可以google一下。以下是我操作的具體代碼:
require_once "simple_html_dom.php"; $htmlDom = str_get_html($https); $out = []; foreach($htmlDom->find(".myScore tbody tr") as $kk => $e) { if($kk != 0){ foreach ($e->children as $k => $child) { switch ($k){ case 0: $out[$kk]["date"] = $child->plaintext ;break; case 1: $out[$kk]["name"] = trimall($child->plaintext) ;break; case 2: $out[$kk]["type"] = trimall($child->plaintext) ;break; case 3: $out[$kk]["raceNetTime"] = $child->plaintext ; if(strpos($out[$kk]["raceNetTime"],"PB") !== false){ $out[$kk]["pbColor"] = "pink"; }else{ $out[$kk]["pbColor"] = ""; } break; case 4:$out[$kk]["raceTrueTime"] = $child->plaintext ;break; // case 5: $out[$kk]["raceDetailTime"] = trimall($child->innertext) ;break; } } } } //釋放資源對(duì)象,會(huì)很占用內(nèi)存 $htmlDom->clear(); unset($htmlDom);
最后我們得到的數(shù)據(jù)結(jié)構(gòu)如下:
前端的話,用的很亂,vue,jq,layer,妹子UI都用了,正真的demo...
放一些JS代碼吧:
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/92259.html
摘要:以下是我操作的具體代碼釋放資源對(duì)象,會(huì)很占用內(nèi)存最后我們得到的數(shù)據(jù)結(jié)構(gòu)如下前端的話,用的很亂,妹子都用了,正真的放一些代碼吧每一項(xiàng)都要填寫未查詢到成績(jī)?cè)僭囋嚢煞?wù)器開小差啦稍后再試 1、線上demo http://demo.blueyian.top/mara...完整的代碼包請(qǐng)上gayhub取用。覺得有用的可以給個(gè)star :)地址:https://github.com/KongYia...
摘要:引發(fā)什么問題了呢最核心的問題是香港處在國(guó)際網(wǎng)絡(luò)環(huán)境,訪問大陸服務(wù)器時(shí)經(jīng)常會(huì)出現(xiàn)網(wǎng)絡(luò)抖動(dòng)的現(xiàn)象,非常無解。其中,負(fù)責(zé)配置,則負(fù)責(zé)執(zhí)行即真正發(fā)送請(qǐng)求。 挖洋貨這項(xiàng)目,因?yàn)闆]有公司的名頭,也就無法備案,所以前端機(jī)放在阿里云香港ECS,另配一臺(tái)阿里云杭州ECS來跑crontab——執(zhí)行爬蟲、保存圖片到阿里云OSS等。最近覺得杭州ECS有點(diǎn)多余了(原本還有個(gè)杭州RDS的,統(tǒng)一搬到香港RDS了),...
摘要:文中提到的每一位,都是為武漢黑客馬拉松,為武漢的互聯(lián)網(wǎng)貢獻(xiàn)著自己的那份熱情。武漢公司員工基本全體出動(dòng),全程參與,提供支持。今年的武漢黑客馬拉松是第二屆,因?yàn)橛卸~的這份執(zhí)著,第二屆武漢黑客馬拉松才得以舉辦。 這個(gè)標(biāo)題,不講章法,我想從個(gè)人的視角來還原一下,一周前的黑客馬拉松和我們對(duì)她的那份執(zhí)著。文中提到的每一位,都是為武漢黑客馬拉松,為武漢的互聯(lián)網(wǎng)貢獻(xiàn)著自己的那份熱情。 我們我(吉佳盛...
摘要:文中提到的每一位,都是為武漢黑客馬拉松,為武漢的互聯(lián)網(wǎng)貢獻(xiàn)著自己的那份熱情。武漢公司員工基本全體出動(dòng),全程參與,提供支持。今年的武漢黑客馬拉松是第二屆,因?yàn)橛卸~的這份執(zhí)著,第二屆武漢黑客馬拉松才得以舉辦。 這個(gè)標(biāo)題,不講章法,我想從個(gè)人的視角來還原一下,一周前的黑客馬拉松和我們對(duì)她的那份執(zhí)著。文中提到的每一位,都是為武漢黑客馬拉松,為武漢的互聯(lián)網(wǎng)貢獻(xiàn)著自己的那份熱情。 我們我(吉佳盛...
摘要:月日微軟宣布,其智能云的第三項(xiàng)核心服務(wù),由世紀(jì)互聯(lián)運(yùn)營(yíng)的智能商業(yè)云平臺(tái)月日正式商用。至此,微軟智能云三駕馬車在中國(guó)團(tuán)聚。在不少業(yè)內(nèi)人士眼中,三朵云的遙相呼應(yīng),彼此共振尤其是的空降,將成為擾動(dòng)中國(guó)云端格局的最重要一股變量。時(shí)至今日,已很少有人懷疑,就像第二次工業(yè)革命后人們用用電量衡量一個(gè)區(qū)域的文明程度一樣,如今用云量已成為判斷一家企業(yè)智能化水準(zhǔn)的關(guān)鍵指標(biāo)。根據(jù)Canalys報(bào)告顯示,2018年...
閱讀 4607·2021-09-26 09:55
閱讀 1352·2019-12-27 12:16
閱讀 879·2019-08-30 15:56
閱讀 1895·2019-08-30 14:05
閱讀 983·2019-08-30 13:05
閱讀 1261·2019-08-30 10:59
閱讀 1437·2019-08-26 16:19
閱讀 1880·2019-08-26 13:47