引用一下这位兄台的博客
今天无意中看到的,我写这篇博客,真的只是简单测试一下。爬虫。请不要误会我的初终
//这是一个简单的cur函数。就用这函数吧
function GetData($url, $cookie="") {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie); //读取cookie
$rs = curl_exec($ch); //执行cURL抓取页面内容
curl_close($ch);
return $rs;
}
//接下来先定义一个csdn博客基本地址
$base_url="http://blog.csdn.net";
//随便找一个人的博客,本次测试下面的使用的正则规则,用的是新版的博客的html代码,爬虫
$blog_url="http://blog.csdn.net/jayhkw";
//接下我们要完成地址列表的爬取,这个应该比较简单
//先访问博客地址,获得返回的结果
$result=GetData($blog_url);
//接下来要开始正则了,直接提取h3的内容,也就是标题,并把结果返回给$result_a
preg_match_all('/<h3 class=\"list_c_t\">(.*?)<\/h3>/i',$result,$result_a);
做到这一步地址其实已经出来了,只不过都是这样的。
array(9) {
[0]=>
string(105) "<h3 class="list_c_t"><a href="/jayhkw/article/details/53761057">css3 多行文本溢出省略号</a></h3>"
......
}
下面我们再去对上面的结果补一次正则,为了理解我把result_a重新赋值给一个新的变量
//由于preg_match_all创建的result_a是一个数组,序列0是结果,序列1是匹配,我只用0项
$list=$result_a[0];
//再申明一个最终的地址列表数组
$url_list=[];
//接下来我去遍利了$list这个数组,也就是h3包含a的部分,对每一项,提取地址,然后给到$url_list里面去
for($i=0;$i<count($list);$i++){
//这里的jayhkw是博主的列表地址的后缀
preg_match('/\/jayhkw\/article\/details\/(.*?)\"/i',$ar[$i],$item);
$ne=preg_replace('/\"/',"", $item[0]);
$url_list[]=$ne;
}
//打印一下,确实成功了
var_dump($url_list);
//地址列表,结果
array(9) {
[0]=>
string(32) "/jayhkw/article/details/53761057"
[1]=>
string(32) "/jayhkw/article/details/53760478"
.....
}
//有了地址列表,就可以简单对每一页进行访问了,并且可以抓去每篇文章,还是上面的办方,curl返回的代码,进行正则
不过我这次只是测试访问,就灰常简单了,直接上代码,,先循环地址,再循环次数
for($u=0;count($url_list);$u++){
//当前循环的地址,组合上我们最开始定义的基准地址,就得到一个完整的博客地址
$url_item=$base_url.$url_list[$u];
//最后循环访问次数,当然这里我写了个100,然而并没有什么个卵用,csdn做了记录限制。
for ($k=0;$k<100;$k++){
GetData($url_item); //访问
}
}
好了。写到这里,也并没有什么个卵用。
我直接上我的完整版的测试代码。我只测了一个url,再深入就要去看http请求头了
突破csdn的访问限制。然而访问次数什么的没有什么个暖用。
<?php
/**
* Created by PhpStorm.
* User: David
* Date: 12/20/2016
* Time: 2:00 PM
*/
//访问页面
function GetData($url, $cookie="") {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie); //读取cookie
$rs = curl_exec($ch); //执行cURL抓取页面内容
curl_close($ch);
return $rs;
}
$base_url="http://blog.csdn.net";
$url="http://blog.csdn.net/jayhkw";
$data=GetData($url);
//preg_match_all('/\/jayhkw\/article\/details\/(.*?)\"/i',$data,$newdata);
preg_match_all('/<h3 class=\"list_c_t\">(.*?)<\/h3>/i',$data,$newdata);
//$ar=array_unique($newdata[0]);
$ar=$newdata[0];
$url_list=[];
for($i=0;$i<count($ar);$i++){
preg_match('/\/jayhkw\/article\/details\/(.*?)\"/i',$ar[$i],$item);
$ne=preg_replace('/\"/',"", $item[0]);
$url_list[]=$ne;
}
var_dump($url_list);
$getUrl=$base_url.$url_list[0];
for ($k=0;$k<10;$k++){
GetData($getUrl);
}