【详解】b站改版后获取当前正在观看人数
2015-12-07 17:57
393 查看
做本例的原因,是原来抓取 当前在线人数与正在观看人数 的脚本出了问题,报错,无法执行!
我们找到原因,是由于B站改版,主页的HTML代码发生变化,当前正在观看人数不在网页上显示了。所以原来的网页信息筛选方法也要变化!
我们是要去寻找一个,不再在网页显示的信息!
【动态网页】
这里提一个概念:动态网页
其实,我们这次需要改进脚本,就是由于改版以后,静态网页升级为了动态网页。我们需要的信息,没有直接在HTML代码中出现。所以选不到!
这就需要我们去寻找这个信息在哪儿!
【寻找数据来源】
目前为止,我们遇到的动态信息来源只有两个,js和json!
排查json,没有!
排查js,找到了!
然后直接访问这个响应对应的消息头中的请求网址就可以了!
由以上寻找的过程,我们可以明白,为什么网络选项,是F12控制台中最重要的选项卡!
因为这里,有信息来源的地址,和每一条反馈的响应!!!
我们找到js的地址如下
可以直接访问这个js的地址,拿到js的反馈信息,反馈信息里就会有我们要的信息。
【注意】:这里必须要read一下,才能够拿到js返回来的信息。
我们将resp打印出来,内容如下:
这一堆信息,其实是字符串,我们需要从其中选择我们需要的数字信息。
我们看到,第一个是在线人数,第二个是正在观看人数。
所以通过String的选择操作,选择到这个两个数字就可以了!
我们找到原因,是由于B站改版,主页的HTML代码发生变化,当前正在观看人数不在网页上显示了。所以原来的网页信息筛选方法也要变化!
我们是要去寻找一个,不再在网页显示的信息!
【动态网页】
这里提一个概念:动态网页
其实,我们这次需要改进脚本,就是由于改版以后,静态网页升级为了动态网页。我们需要的信息,没有直接在HTML代码中出现。所以选不到!
这就需要我们去寻找这个信息在哪儿!
【寻找数据来源】
目前为止,我们遇到的动态信息来源只有两个,js和json!
排查json,没有!
排查js,找到了!
然后直接访问这个响应对应的消息头中的请求网址就可以了!
由以上寻找的过程,我们可以明白,为什么网络选项,是F12控制台中最重要的选项卡!
因为这里,有信息来源的地址,和每一条反馈的响应!!!
我们找到js的地址如下
mainUrl="http://www.bilibili.com/online.js"
可以直接访问这个js的地址,拿到js的反馈信息,反馈信息里就会有我们要的信息。
def toOnline(): '''拿到js反馈信息''' resp=urllib2.urlopen(mainUrl) return resp.read()
【注意】:这里必须要read一下,才能够拿到js返回来的信息。
def getPlayNumber(): '''获取js中的正在观看人数''' resp=toOnline() print resp data=resp[42:49] return data
我们将resp打印出来,内容如下:
这一堆信息,其实是字符串,我们需要从其中选择我们需要的数字信息。
我们看到,第一个是在线人数,第二个是正在观看人数。
所以通过String的选择操作,选择到这个两个数字就可以了!
相关文章推荐
- 什么是ROM、RAM、DRAM、SRAM和FLASH的区别
- 安卓消息处理机制
- 怎么做QQ、微信等消息气泡
- css笔记
- 快速排序
- synchronized在多线程情况下的使用
- nmon生成文件的各项参数解释说明
- 关于compileSdkVersion和targetSdkVersion
- iOS基础-UItoolBar简单使用
- 图解Android触摸事件分发
- 新浪微博分享不显示分享的链接问题
- Objective-c语言-对象
- windows下C的定时器timeSetEvent使用
- ssh 端口转发
- 通过bind实现activity与service的交互
- UE4 屏幕输出调试信息
- psql-07表:分区表
- 一篇给小白看的 JavaScript 引擎指南
- ScrollView嵌套listView和Viewpager后的显示不全解决
- 读书不如行路