php刷csdn博客访问,爬虫测试

引用一下这位兄台的博客

今天无意中看到的,我写这篇博客,真的只是简单测试一下。爬虫。请不要误会我的初终

http://blog.csdn.net/ShanaMaid/article/details/52594879

//这是一个简单的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);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值