ag旗舰厅官网_ag旗舰厅下载客户端

热门关键词: ag旗舰厅官网,ag旗舰厅下载客户端

计算机网络

当前位置:ag旗舰厅官网 > 计算机网络 > 应用PHP抓取百度读书的格局言传身教,怎么利用

应用PHP抓取百度读书的格局言传身教,怎么利用

来源:http://www.pedaLyourcycLe.com 作者:ag旗舰厅官网 时间:2019-09-30 16:18

抓取方法如下

前言

首先在浏览器里张开阅读页面,查看源代码后意识小说的内容并不是直接写在页面里的,也等于说小说的剧情是由此异步加载而来的。

那篇小说主要介绍的是,怎么着选用PHP抓取百度读书的点子,下边话没多少说,来一齐看看啊。

于是将chrome的开荒者工具切到network一栏,刷新阅读页面,首要关切的是XH智跑和script多少个分类下。

抓取方法如下

因而排查,开掘在script分类下有个jsonp供给比较疑似小说内容,恳求的地点是

首先在浏览器里展开阅读页面,查看源代码后意识小说的源委并非直接写在页面里的,也正是说小说的剧情是由此异步加载而来的。

于是将chrome的开采者工具切到network一栏,刷新阅读页面,首要关切的是XH宝马7系和script多少个分类下。

回去的是一个jsonp字符串,然后作者意识,假诺把地点里面包车型大巴callback=wenku7去掉,重返的就是叁个json字符串,那样解析起来就方便广大,能够直接在php里面调换来数组。

通过排查,开掘在script分类下有个jsonp央浼相比较疑似小说内容,央求的地址是

再来剖判一下赶回数据的布局,再次来到的json字符串之后是贰个树状的结构,每一个节点都有三个t属性和c属性,t属性用来指明那么些节点的标签,比方h2 div等等,c属性正是内容了,但也是有三种大概,三个是字符串,另四个是数组,数组的种种成分都以二个节点。

这种组织最棒解析了,用叁个递归就消除

回到的是八个jsonp字符串,然后自个儿发觉,若是把地点里面包车型地铁callback=wenku7去掉,再次来到的就是四个json字符串,这样深入分析起来就低价广大,可以平素在php里面转变来数组。

最终代码如下:

再来解析一下赶回数据的结构,再次回到的json字符串之后是一个树状的构造,每一个节点都有三个t属性和c属性,t属性用来指明那么些节点的标签,举个例子h2 div等等,c属性正是内容了,但也可以有二种大概,贰个是字符串,另三个是数组,数组的各类成分都是七个节点。

<?php

classBaiduYuedu {

 protected$bookId;

 protected$bookToken;

 protected$cookie;

 protected$result;

 publicfunction__construct($bookId,$bookToken,$cookie){

  $this->bookId =$bookId;

  $this->bookToken =$bookToken;

  $this->cookie =$cookie;

 }

 publicstaticfunctionparseNode($node){

  $str=''

  if(is_string($node['c'])){

   $str.=$node['c'];

  }elseif(is_array($node['c'])){

   foreach($node['c']as$d){

    $str.= self::parseNode($d);

   }

  }

  switch($node['t']){

   case'h2':

    $str.="nn";

    break;

   case'br':

   case'div':

   case'p':

    $str.="n";

    break;

   case'img':

   case'span':

    break;

   case'obj':

    $tmp='('. self::parseNode($node['data'][0]) .')'

    $str.=str_replace("n",'',$tmp);

    break;

   default:

    trigger_error('Unkown type:'.$node['t'], E_USER_WARNING);

    break;

  }

  return$str;

 }

 publicfunctionget($page= 1){

  echo"getting page {$page}...n";

  $ch= curl_init();

  $url= sprintf('http://wenku.baidu.com/content/%s/?m=%s&type=json&cn=%d',$this->bookId,$this->token,$page);

  curl_setopt_array($ch,array(

   CURLOPT_URL   =>$url,

   CURLOPT_RETURNTRANSFER => 1,

   CURLOPT_HEADER   => 0,

   CURLOPT_HTTPHEADER  =>array('Cookie: '.$this->cookie)

  ));

  $ret= json_decode(curl_exec($ch), true);

  curl_close($ch);

  $str=''

  if(!empty($ret)){

   $str.= self::parseNode($ret);

   $str.=$this->get($page+ 1);

  }

  return$str;

 }

 publicfunctionstart(){

  $this->result =$this->get();

 }

 publicfunctiongetResult(){

  return$this->result;

 }

 publicfunctionsaveTo($path){

  if(empty($this->result)){

   trigger_error('Result is empty', E_USER_ERROR);

   return;

  }

  file_put_contents($path,$this->result);

  echo"save to {$path}n";

 }

}

//使用示例

$yuedu=newBaiduYuedu(�a3769eae009581becba',Ǝed1dedb240b11bf0731336eff95093f','你的百度域cookie');

$yuedu->start();

$yuedu->saveTo('result.txt');


这种结构最棒分析了,用二个递归就消除

其一类前七个参数能够从小说的介绍页面获得,第多个参数bookId便是url里ebook前边随着的字符串,第一个参数bookToken在页面源代码寻觅bdjsonUrl,m参数前边的要命字符串就是。

末段代码如下:

注:假若不传播百度cookie只怕百度cookie无效,则不得不抓取免费读书部分,要抓全体的内容必需保证cookie能够健康使用。

<?php
class BaiduYuedu {
 protected $bookId;
 protected $bookToken;
 protected $cookie;
 protected $result;
 public function __construct($bookId, $bookToken, $cookie){
  $this->bookId = $bookId;
  $this->bookToken = $bookToken;
  $this->cookie = $cookie;
 }
 public static function parseNode($node){
  $str = '';
  if(is_string($node['c'])){
   $str .= $node['c'];
  }else if(is_array($node['c'])){
   foreach($node['c'] as $d){
    $str .= self::parseNode($d);
   }
  }
  switch($node['t']){
   case 'h2':
    $str .= "nn";
    break;
   case 'br':
   case 'div':
   case 'p':
    $str .= "n";
    break;
   case 'img':
   case 'span':
    break;
   case 'obj':
    $tmp = '(' . self::parseNode($node['data'][0]) . ')';
    $str .= str_replace("n", '', $tmp);
    break;
   default:
    trigger_error('Unkown type:'.$node['t'], E_USER_WARNING);
    break;
  }
  return $str;
 }
 public function get($page = 1){
  echo "getting page {$page}...n";
  $ch = curl_init();
  $url = sprintf('http://wenku.baidu.com/content/%s/?m=%s&type=json&cn=%d', $this->bookId, $this->token, $page);
  curl_setopt_array($ch, array(
   CURLOPT_URL   => $url,
   CURLOPT_RETURNTRANSFER => 1,
   CURLOPT_HEADER   => 0,
   CURLOPT_HTTPHEADER  => array('Cookie: '. $this->cookie)
  ));
  $ret = json_decode(curl_exec($ch), true);
  curl_close($ch);
  $str = '';
  if(!empty($ret)){
   $str .= self::parseNode($ret);
   $str .= $this->get($page + 1);
  }
  return $str;
 }
 public function start(){
  $this->result = $this->get();
 }
 public function getResult(){
  return $this->result;
 }
 public function saveTo($path){
  if(empty($this->result)){
   trigger_error('Result is empty', E_USER_ERROR);
   return;
  }
  file_put_contents($path, $this->result);
  echo "save to {$path}n";
 }
}
//使用示例
$yuedu = new BaiduYuedu('49422a3769eae009581becba', '8ed1dedb240b11bf0731336eff95093f', '你的百度域cookie');
$yuedu->start();
$yuedu->saveTo('result.txt');

总结:

那些类前七个参数能够从小说的牵线页面获得,第贰个参数bookId就是urlebook末尾跟着的字符串,第一个参数bookToken在页面源代码寻找bdjsonUrlm参数前面包车型客车特别字符串就是。

以上正是那篇小说的全体内容了,希望本文的剧情对我们学习或然选用PHP能有一定的提携,假若有疑点我们能够留言交换。

注:万一不扩散百度cookie要么百度cookie失效,则不得不抓取免费读书部分,要抓全体的从头到尾的经过必需保障cookie能够健康使用。

总结

上述正是那篇小说的全体内容了,希望本文的内容对大家学习恐怕接纳PHP能有必然的声援,假使有疑问大家能够留言调换。

您可能感兴趣的稿子:

  • PHP网页抓取之抓取百度贴吧邮箱数据代码共享
  • php下通过curl抓取yahoo boss 搜索结果的落到实处代码
  • PHP抓取天猫商城商品的顾客晒单商量+图片+搜索商品列表实例
  • PHP总结nginx访问日志中的寻找引擎抓取404链接页面路线
  • PHP实现收集抓取天猫商城网单个商品音信
  • PHP的cUENVISIONL库作用简要介绍抓取网页、POST数据及别的
  • PHP实现抓取百度查寻结果页面【相关寻找词】并积存到txt文件示例

本文由ag旗舰厅官网发布于计算机网络,转载请注明出处:应用PHP抓取百度读书的格局言传身教,怎么利用

关键词: