全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

利用PHP抓取百度阅读的方法示例

前言

这篇文章主要介绍的是,如何利用PHP抓取百度阅读的方法,下面话不多说,来一起看看吧。

抓取方法如下

首先在浏览器里打开阅读页面,查看源代码后发现小说的内容并不是直接写在页面里的,也就是说小说的内容是通过异步加载而来的。

于是将chrome的开发者工具切到network一栏,刷新阅读页面,主要关注的是XHR和script两个分类下。

经过排查,发现在script分类下有个jsonp请求比较像是小说内容,请求的地址是

http://wenku.baidu.com/content/49422a3769eae009581becba?m=8ed1dedb240b11bf0731336eff95093f&type=json&cn=1&_=1&t=1423309200&callback=wenku7

返回的是一个jsonp字符串,然后我发现,如果把地址里面的callback=wenku7去掉,返回的就是一个json字符串,这样解析起来就方便不少,可以直接在php里面转换成数组。

再来分析一下返回数据的结构,返回的json字符串之后是一个树状的结构,每个节点都有一个t属性和c属性,t属性用来指明这个节点的标签,比如h2 div等等,c属性就是内容了,但也有两种可能,一个是字符串,另一个是数组,数组的每个元素都是一个节点。

这种结构最好解析了,用一个递归就搞定

最终代码如下:

<?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 .= "\n\n";
    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参数后面的那个字符串就是。

注:如果不传入百度cookie或者百度cookie无效,则只能抓取免费阅读部分,要抓完整的内容必须保证cookie可以正常使用。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家学习或者使用PHP能有一定的帮助,如果有疑问大家可以留言交流。


# php爬虫  # php抓取源码  # PHP网页抓取之抓取百度贴吧邮箱数据代码分享  # php下通过curl抓取yahoo boss 搜索结果的实现代码  # PHP抓取淘宝商品的用户晒单评论+图片+搜索商品列表实例  # PHP统计nginx访问日志中的搜索引擎抓取404链接页面路径  # PHP实现采集抓取淘宝网单个商品信息  # PHP的cURL库功能简介 抓取网页、POST数据及其他  # PHP实现抓取百度搜索结果页面【相关搜索词】并存储到txt文件示例  # 的是  # 这篇文章  # 递归  # 源代码  # 都是  # 是一个  # 都有  # 有个  # 第一个  # 而来  # 有一定  # 树状  # 第二个  # 但也  # 再来  # 可以直接  # 正常使用  # 有两种  # 多说  # 看看吧 


相关文章: 制作网页的网站有哪些,电脑上怎么做网页?  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  广州美橙建站如何快速搭建多端合一网站?  西安大型网站制作公司,西安招聘网站最好的是哪个?  如何使用Golang安装API文档生成工具_快速生成接口文档  如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?  Python lxml的etree和ElementTree有什么区别  建站之星2.7模板:企业网站建设与h5定制设计专题  如何用搬瓦工VPS快速搭建个人网站?  中山网站推广排名,中山信息港登录入口?  建站之星如何一键生成手机站?  公司网站的制作公司,企业网站制作基本流程有哪些?  清除minerd进程的简单方法  实例解析Array和String方法  C++时间戳转换成日期时间的步骤和示例代码  深圳企业网站制作设计,在深圳如何网上全流程注册公司?  中山网站制作网页,中山新生登记系统登记流程?  建站主机如何安装配置?新手必看操作指南  MySQL查询结果复制到新表的方法(更新、插入)  Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递  如何在服务器上配置二级域名建站?  建站之星展会模版如何一键下载生成?  测试制作网站有哪些,测试性取向的权威测试或者网站?  如何在Golang中处理模块冲突_解决依赖版本不兼容问题  专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?  自助网站制作软件,个人如何自助建网站?  建站主机CVM配置优化、SEO策略与性能提升指南  电影网站制作价格表,那些提供免费电影的网站,他们是怎么盈利的?  如何通过免费商城建站系统源码自定义网站主题与功能?  如何用景安虚拟主机手机版绑定域名建站?  建站之星体验版:智能建站系统+响应式设计,多端适配快速建站  如何在云指建站中生成FTP站点?  如何快速搭建高效服务器建站系统?  视频网站制作教程,怎么样制作优酷网的小视频?  建站主机助手选型指南:2025年热门推荐与高效部署技巧  定制建站模板如何实现SEO优化与智能系统配置?18字教程  专业网站建设制作报价,网页设计制作要考什么证?  如何在阿里云ECS服务器部署织梦CMS网站?  如何通过网站建站时间优化SEO与用户体验?  长春网站建设制作公司,长春的网络公司怎么样主要是能做网站的?  如何彻底卸载建站之星软件?  Android自定义控件实现温度旋转按钮效果  企业网站制作公司网页,推荐几家专业的天津网站制作公司?  如何通过商城自助建站源码实现零基础高效建站?  javascript中的try catch异常捕获机制用法分析  上海网站制作开发公司,上海买房比较好的网站有哪些?  枣阳网站制作,阳新火车站打的到仙岛湖多少钱?  网站制作的步骤包括,正确网址格式怎么写?  建站VPS能否同时实现高效与安全翻墙?  免费公司网站制作软件,如何申请免费主页空间做自己的网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。