抓取数据就像是同网页作斗争,本身在这里记录下本身作斗争的这个过程,一步一步来。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';
}