前言

这篇文章主要介绍的是,如何利用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就是url里ebook后面跟着的字符串,第二个参数bookToken在页面源代码搜索bdjsonUrl,m参数后面的那个字符串就是。
注:如果不传入百度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小时内与您取得联系。