简介

最近突发奇想,想获取一下B站上的用户数据做个分析啥的。这个东西已经有很多人做过了,所以网上的成功案例也比较多。但是不少的信息已经不适合现在使用了。比如一些使用api.bilibili.com的接口。这里记录一下趟坑的经历。

流程

由于我最初的目标只是通过用户名获得一个用户的个人空间地址。分析了一下url之后发现,所有用户都会通过一个自增的mid进行区分。

最初看的几篇教程中,获得用户的数据不仅可以通过mid这个参数,还可以通过用户名,也就是user字段来进行查询。即http://api.bilibili.cn/userinfo这个接口。但是发现这个接口已经不能用了。发送消息返回404状态。

那么就只有根据浏览器行为分析找找接口了。检查发现了一个这样的接口https://space.bilibili.com/ajax/member/GetInfo参数是mid字段。但是无法通过用户名获取mid。

接下来的想法是找找还有什么地方可以获取这个人的mid,比如试图抓取关注的up注的关注者,发现只能抓取前五页。或者是使用百度之类的搜索引擎的高级搜索,看看能不能搜索到相关的信息。

以上尝试都失败的情况下,尝试获取bilibili全部的用户数据。因为mid是一个从1开始自增的数据,因此可以用这种方法来遍历这些用户的信息,来找到相关的数据。

bilibili有接近一亿用户。直接单线程跑数据,一秒一条的话,需要27777个小时才能抓取完。时间太久了,尝试使用各种方法来缩短这个时间。

比如改成一秒发送两条请求。这个接口的限制貌似是一分钟100条左右,因此这里每0.5秒发送一个请求。

还可以开启多线程,利用ip代理池来发送请求,这样避免了ip被限制的问题。或许可以缩短一些时间。

此外还可以用其他手段缩短查找范围。因为mid这个字段是自增的,还可以查看注册时间,如果能获得账号的注册时间,就可以尝试通过注册时间二分查找这个账号的mid。

尝试使用参考9中的代理ip池来进行代理操作。按照这个代理池中的说明,安装了SSDB,然后开启了代理池。感觉没什么问题。

在代码中用requests的方式调用了代理池的接口,并使用代理访问查看本机ip的网址http://ip.chinaz.com/。代理的使用没有问题。

之后尝试使用代理拉取bilibili的mid为1到10的数据。表现良好。

尝试接入之前使用mysql写的数据库模块中。发现之前写的东西不支持多线程。需要加入多线程。暂时使用单线程来拉取数据,并写入数据库。看起来没什么问题。

多线程试图通过threading和multiprocessing模块来进行处理。还需要考虑中断的继续和现场的保存。

** 注意多进程之间的数据交互还是要使用multiprocess提供的方法,否则进程之间无法传递数据。 **

threading模块对于多核的使用没有multiprocessing好,一个是。multiprocessing能开启多个进程。这就涉及到了进程之间的通信问题。

开始的时候考虑实现一个能迭代的manager来返回下一个需要处理的mid,然后使用multiprocessing提供的pool和map方法来处理。但是这样产生了消息传递的问题。但是因为需要处理web请求的成功和失败,所以本来使用单例模式的manager在多进程中的共享产生了问题。

搜索了一下考虑使用multiprocessing提供的可供多进程使用的变量,如Value,Array等等。

使用的时候发现其实直接在主线程里对mid进行管理即可。这样需要获取一个拉取的状态。

保存现场最终选择在一个本地的文本文件中序列化了一串字符串,记录了多线程的处理状态和主线程mid管理的进度,方便下次继续。

拉取到的数据选择存储在本地的一个数据库文件中。Python内置了一个sqlite支持。使用这个创建一个db文件即可。

拉取数据的时候插入数据库使用replace而不是使用insert,因为断点续传的时候有可能会遇到id已经之前存储过了的状况。这种状况并不是难以忍受的问题,所以这样的容错处理就可以了。

最终拉取的数据还是要利用sql从数据库文件中获取。

总结

这次实践实际的掌握了一下前端页面的network请求以及Python对于数据的处理。虽然看起来量不小,但是其实并不难也没有设置太多的障碍。可以

python爬取b站up主粉丝信息_使用Python爬取B站数据相关推荐

  1. python查看物理内存和交换区的统计信息_使用python获取CPU和内存信息的思路与实现(linux系统)...

    linux里一切皆为文件,在linux/unix的根文件夹下,有个/proc文件夹,这个/proc 是一种内核和内核模块用来向进程(process)发送信息的机制(所以叫做"/proc&qu ...

  2. Pyhotn3,爬取B站up主的信息!

    今天搞一下,B站UP主前100名的数据信息~ 不要多想,不要多问,纯粹为了技术,不为数据~ 说我的都信了!! 接下来,老规矩,上代码,看看怎么实现爬取B站up主的信息: # -*- coding:ut ...

  3. python爬取b站粉丝数_【python爬虫】每天统计一遍up主粉丝数!

    每天统计一遍up主粉丝数! 第一步,爬取up主的粉丝信息 为了方便,这里我把它写成了一个函数 1.首先导入需要的包 requests是必不可少的! import requests as req 想要记 ...

  4. B站UP主指法芬芳张大仙弹幕爬取及可视化

    文章目录 前言 一.爬取视频弹幕相关信息 1.B站弹幕接口 2.获取视频的cid 3.获取视频弹幕信息 二.弹幕数据可视化 1.弹幕内容可视化 -- 词云图 2.弹幕发送者可视化 -- 水平条形图 3 ...

  5. python b站 关注_[我叫以赏]Python获取B站UP主粉丝数

    前言 不少人对B站粉丝数有着强烈的"控制感",特别是B站用户"老番茄"的粉丝数要达到1000万了,不少人想要见到突破1000w粉的那一瞬间,虽然有很多网站提供了 ...

  6. python b站 礼物_[我叫以赏]Python获取B站UP主粉丝数

    前言 不少人对B站粉丝数有着强烈的"控制感",特别是B站用户"老番茄"的粉丝数要达到1000万了,不少人想要见到突破1000w粉的那一瞬间,虽然有很多网站提供了 ...

  7. python怎么爬取一个网页图片显示不出来_使用python爬取网页,获取不到图片地址【python 爬取图片教程】...

    python 网络爬虫,怎么自动保存图片 f12找啊 使用python爬取网页,获取不到图片地址 大图片是在点击之后用 JS 控制加载的. 你可以看看 js/js.js 这个文件,253 行:func ...

  8. python爬取本地天气信息_用Python写一个爬取中国天气网的终端版天气预报爬虫

    导语 前几篇文章介绍了爬取静态网站的主要方法.今天写一个小项目实践一下.本项目可以在终端窗口查询全国3400多个区县的当日天气信息和近七天天气信息. 实现效果 [Python爬虫]写一个爬取中国天气网 ...

  9. python爬房源信息_用python爬取链家网的二手房信息

    题外话:这几天用python做题,算是有头有尾地完成了.这两天会抽空把我的思路和方法,还有代码贴出来,供python的初学者参考.我python的实战经历不多,所以代码也是简单易懂的那种.当然过程中还 ...

  10. Python获取熊猫TVLOL栏所有主播信息以及人气排名

    今天爬取的网页为:熊猫TV LOL栏 一,分析网页: 一共6页,我们要想办法获取所有页的信息,所以F12查看网络请求,点击第二页: 发现了这个请求 这就是我们需要的东西 所以推测 pageno参数为第 ...

最新文章

  1. 细说PHP中strlen和mb_strlen的区别(转)
  2. 构建之法之单元测试及设计流程
  3. hibernate教程--一级缓存详解
  4. 微信小程序使用adb工具
  5. H.264的两个概念:DC系数和AC系数。 MV预测过程详解(附图)
  6. 最值钱无人车团队组织架构曝光:Waymo总共不到千人,2/3是工程师
  7. 北京科技大学计算机实践,北京科技大学计算机实践报告-Excel 练习
  8. JAVA对接飞猪旅行_飞猪对接教程
  9. c# chart 各个属性_c# Chart设置样式
  10. 湍流公式推导系列——(一) 不可压湍动能方程的推导与含义
  11. index.php.bak 颓废_18.phpmyadmin 4.8.1 远程文件包含漏洞(CVE-2018-12613)
  12. android FM的流程
  13. 基于Android的班级同学录校友录系统app
  14. 0基础java好学吗?完整学习路线图速收藏
  15. 英伟达黄仁勋发布全球最大GPU,超300斤,汽车后备箱大小
  16. [Latex] 自动换行 | 正文两端对齐
  17. linux终端设置为中文
  18. python思维导图
  19. 如何处理Elixir中的异常
  20. 1026 Table Tennis (30 分)模拟排列问题

热门文章

  1. 图片放大后模糊怎么变清晰?
  2. Framework类库
  3. Springboot集成Swagger接口测试工具
  4. mysql 分库分表中间件 mycat_Mysql—分库分表中间件(Mycat)
  5. LVS+Keepalived+Nginx+Tomcat高可用负载均衡集群配置
  6. ST Visual Programmer(STVP)给STM8系列芯片烧录程序方法
  7. 阿里云总监课第四期:阿里褚霸携专家团独家分享弹性计算最佳实践
  8. 三种经典网页音乐播放器
  9. Win10 磁盘被写保护 请去掉写保护或使用另一张磁盘
  10. 协方差矩阵的计算方法