要提取google搜尋的部分資料,發現google對於軟體抓取它的資料屏蔽的厲害,以前偽造下 USER-AGENT 就可以抓資料,但是現在卻不行了。利用抓包資料發現,Google 判斷了 cookies,當你沒有cookies的時候,直接返回 302 跳轉,而且是連續幾十個302跳轉,根本抓不了資料。
因此,在發送搜尋命令時,需要先提取 cookies 並儲存,然後利用儲存下來的這個cookies再次發送搜尋命令即可正常抓資料了。這其實和論壇的類比登入一個道理,先POST登入,擷取cookies並儲存,然後利用這個cookies訪問就可以了。
一、定義Cookie儲存路徑
必須使用絕對路徑
$cookie_jar = dirname(__FILE__)."/pic.cookie";
二、擷取Cookie
將cookie存入檔案
$url = "http://1.2.3.4/";$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_HEADER, 0);curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_jar);$content = curl_exec($ch);curl_close($ch);
三、類比瀏覽器擷取驗證碼
該伺服器驗證碼有漏洞,可以自己指定
取出cookie,一起提交給伺服器,讓伺服器以為是瀏覽器開啟登陸頁面
$ch = curl_init();curl_setopt($ch, CURLOPT_URL, 'http://1.2.3.4/getCheckpic.action?rand=6836.185874812305');curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_jar);curl_setopt($ch, CURLOPT_HEADER, 0);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);$ret = curl_exec($ch);curl_close($ch);
四、POST提交
$post = "name=2&userType=1&passwd=asdf&loginType=1&rand=6836&imageField.x=25&imageField.y=7"; $ch = curl_init();curl_setopt($ch, CURLOPT_URL, "http://1.2.3.4/loginstudent.action");curl_setopt($ch, CURLOPT_HEADER, false);curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);curl_setopt($ch, CURLOPT_POSTFIELDS, $post);curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_jar);$result=curl_exec($ch);curl_close($ch);
五、到指定頁面擷取資料
$ch = curl_init();curl_setopt($ch, CURLOPT_URL, "http://1.2.3.4/accountcardUser.action");curl_setopt($ch, CURLOPT_HEADER, false);curl_setopt($ch, CURLOPT_HEADER, 0);curl_setopt($ch, CURLOPT_RETURNTRANSFER,0); curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_jar);$html=curl_exec($ch);// var_dump($html);curl_close($ch);
http://www.bkjia.com/PHPjc/444553.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/444553.htmlTechArticle要提取google搜尋的部分資料,發現google對於軟體抓取它的資料屏蔽的厲害,以前偽造下 USER-AGENT就可以抓資料,但是現在卻不行了。利用抓...