[請益] 請問cURL某一網站的問題

作者: marksam (炸橋)   2016-03-30 17:26:03
小弟想利用curl來抓取某網站的內容
https://www.youtube.com/trendsdashboard#age0=25-34&loc0=twn
使用以下mycurl()的程式碼 , 有抓到東西
抓到的head如下:
HTTP/1.1 200 OK Date: Wed, 30 Mar 2016 09:23:41 GMT Server: gwiseguy/2.0
X-Frame-Options: SAMEORIGIN X-XSS-Protection: 1; mode=block;
report=https://www.google.com/appserve/security-bugs/log/youtube
Cache-Control: no-cache Content-Type: text/html; charset=utf-8 Expires: Tue,
27 Apr 1971 19:44:06 EST Strict-Transport-Security: max-age=604800
X-Content-Type-Options: nosniff Accept-Ranges: none Vary: Accept-Encoding
Transfer-Encoding: chunked
後來我也有把cookie 送上去
但不知為什麼抓不到原始網頁下方影片的資訊(連結href, 點及次數...等資訊)
想請教大家自己是哪個地方出錯?
或是目標網頁有什麼新技術 造成無法抓取呢? 感謝~~
function mycurl()
{
//目標網站
$target1="https://www.youtube.com/trendsdashboard#age0=25-34&loc0=twn ";
#####(A 1)選項設定: 目標設置 / 起始 / 假冒
$s=curl_init();
curl_setopt($s,CURLOPT_URL,$target1);
$user_agent='Mozilla/5.0 (Windows NT 6.1;WOW64) AppleWebKit/537.11 (KHTML,
like Gecko) Chrome/23.0.1271.95 Safari/537.11';
curl_setopt($s, CURLOPT_USERAGENT, $user_agent);
#(1)是否發送POST請求 (填表單)
//$POST_data1=array('CN'=>"l6",'remember'=>"1",'UserPASSWORD'=>"091",'URL'=>"");
//$POST_data2=array('username'=>"markbone2@yahoo.com.tw",'passwd'=>"");
//curl_setopt($s,CURLOPT_POST,1);
//curl_setopt($s,CURLOPT_POSTFIELDS,$POST_data1);
#(2)結果回傳:是否以 文件流/二元碼方式傳回
curl_setopt($s,CURLOPT_RETURNTRANSFER,TRUE);
//curl_setopt($s,CURLOPT_BINARYTRANSFER,TRUE);
#(3)結果回傳:是否 包含標頭 / 只要BODY
curl_setopt($s,CURLOPT_HEADER,TRUE);
#(4)COOKIE設定: CURLOPT_COOKIEJAR接收儲存資訊 ,而CURLOPT_COOKIEFILE送出資訊。
###送出多個cookie內容(變數資料串),分號後要帶1個空格 範例"friut=8923;
curl_setopt($s,CURLOPT_COOKIE,"VISITOR_INFO1_LIVE=4kLW9NhJVbI;
YSC=KTyxERZA5Io; PREF=f1=50000000");
###記錄COOKIE資訊,在cookie.txt中(絕對位置)
curl_setopt($s,CURLOPT_COOKIEJAR,"C:\\xampp\\htdocs\\mark\\cookie.txt");
###瀏覽時,把cookie.txt當中的COOKIE資訊一併送出給伺服器
curl_setopt($s,CURLOPT_COOKIEFILE,"C:\\xampp\\htdocs\\mark\\cookie.txt");
#(5)SSL網站 (https開頭)
######抓取SLL網站則要記得開啟verifypeer這行 並設定成false
curl_setopt($s,CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($s,CURLOPT_SSL_VERIFYHOST,0);
//curl_setopt($s, CURLOPT_SSL_CAPATH,cainfo);
//curl_setopt($s, CURLOPT_SSL_CAINFO,"cainfo.txt");
//curl_setopt($s, CURLOPT_SSL_VERSION,2);
######是否檢查伺服器端SSL證書中有沒有domain/subdomain name
//curl_setopt($s, CURLOPT_SSL_VERIFYHOST,TRUE);
# (6)設定等待SERVER的時間~單位秒
curl_setopt($s,CURLOPT_TIMEOUT,15);
# (7)重新導向 : 是否跟隨重導 ,設定引入參照, 最大重導次數
curl_setopt($s,CURLOPT_FOLLOWLOCATION,TRUE);
curl_setopt($s,CURLOPT_AUTOREFERER,TRUE);
curl_setopt($s,CURLOPT_MAXREDIRS,3);
//curl_setopt($s,CURLOPT_UNRESTRICTED_AUTH,TRUE);
#####(B)最後一次 執行CURL 並把錯誤資訊導出################
$download_page=curl_exec($s);
$errors=curl_error($s);
###### 展示並寫入擋案:$download_page & webget.txt ########
echo $download_page."<br>"."抓取結END!";
file_put_contents("WEBget.txt",$download_page);
}
作者: MOONRAKER (㊣牛鶴鰻毛人)   2016-03-30 18:22:00
天啊 ajax網站用curl怎麼抓得完人家有API 不要用這種逼豬上樹的方法好嗎
作者: marksam (炸橋)   2016-03-30 18:51:00
如何看出有AJAX呢? 慢慢爬JS碼嗎?
作者: JustGame (JustGame)   2016-03-30 22:16:00
請愛用瀏覽器 F12 快捷鍵,是說這樣來得及結案嗎?
作者: marksam (炸橋)   2016-03-30 23:11:00
按了f12阿 但是從我抓下來的內容中 找不到關鍵的ajax應該問「從js大海中 看出ajax的關鍵字」是什麼呢?
作者: Neisseria (Neisseria)   2016-03-30 23:17:00
https://www.youtube.com/yt/dev/ 不要花時間找了有空的話,好好學些 third-party API 卡實在
作者: aaa7513231 (渾沌與秩序)   2016-03-31 00:31:00
蠻好奇他不是要求用bat或exe嘛,php是要怎樣用啊
作者: Neisseria (Neisseria)   2016-03-31 05:02:00
作者: MOONRAKER (㊣牛鶴鰻毛人)   2016-03-31 09:41:00
你是在抓youtube 不是沒人聽過的2266站好嗎這種變態的站根本不用看他有沒有ajax 用聞的就知道了

Links booklink

Contact Us: admin [ a t ] ucptt.com