php抓取網頁內容方法分析

抓取數據就像是同網頁作鬥爭,本身在這裏記錄下本身作鬥爭的這個過程,一步一步來。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';
}
相關文章
相關標籤/搜索