抓取數據就像是同網頁作鬥爭,本身在這裏記錄下本身作鬥爭的這個過程,一步一步來。ajax
前兩個網頁抓取的都很順利,可是到了果殼網發現之前用的方法不行了,因而換用curl:瀏覽器
$ch = curl_init();
$timeout = 5;
curl_setopt ($ch, CURLOPT_URL,"http://mooc.guokr.com/search/course/?wd=qq");
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$contents3 = curl_exec($ch);
curl_close($ch);
$regex6="/<ul class=\"course_list\".*?>.*?<\/ul>/ism";
if(preg_match_all($regex6, $contents3, $matchs3)){
// echo($matchs3[0][0]);
}else{
echo '0';
}
echo "<hr/>";
而後本身發現到了極客學院,本身上面的方法又不行了,抓取到的不是有用的數據反而是沒什麼用處的 網頁說瀏覽器錯誤,緣由是本身沒有聲明瀏覽器類型:ruby
$UserAgent = 'Mozilla/5.0 (Windows; U; Windows NT 5.2) Gecko/2008070208 Firefox/3.0.1';
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'http://www.jikexueyuan.com/search/s/q_%E5%BE%AE%E4%BF%A1');
curl_setopt($curl, CURLOPT_USERAGENT, $UserAgent);
$data = curl_exec($curl);
而後接下來是網易雲課堂,因而乎本身的上面的方法又不行了。一會再說網易雲課堂這個鬼,由於它是用js的ajax動態加載的內容,因此就比較蛋疼。
因而乎本身先抓了淘寶,可是發現抓淘寶的時候又有一個問題就是淘寶教育的編碼並非utf-8,因而本身在淘寶的抓取上用了這樣一個函數:bash
function safeEncoding($str){
$code=mb_detect_encoding($str,array('ASCII','GB2312','GBK','UTF-8'));//檢測字符串編碼
if($code=="CP936"){
$result=$str;
}
else{
//$result=mb_convert_encoding($str,'UTF-8',$code);//將編碼$code轉換爲utf-8編碼
$result=iconv($code,"UTF-8",$str);
}
return $result;
}
只要對結果使用這個函數就沒有什麼問題了。markdown
而後本身在抓取開課吧的時候,又發現了一個新的問題: 開課吧的網址連接是相對連接的,本身須要替換成絕對連接,用正則替換或者通常的字符串替換替換成通常的絕對連接就能夠:cookie
下面本身給了兩個方法:curl
$body=fcontents($url10,$cookie);
$body=preg_replace("/href=\"\/courses\//u","href=\"http://www.kaikeba.com/courses/",$body);
$regex9="/<ul class=\"list-unstyled course-row\".*?<\/ul>/ism";
if(preg_match_all($regex9, $body, $matchs5)){
$temp=$matchs5[0][0];
// echo gettype($temp);
// $temp=str_replace("href=\"/courses","href=\"http://www.kaikeba.com/courses",$temp);
echo($temp);
}else{
echo '0';
}