作家
登录

如何快速爬取B站全站视频信息

作者: 来源: 2017-11-20 09:07:04 阅读 我要评论

Tech Neo技巧沙龙 | 11月25号,九州云/ZStack与您一路商量云时代收集界线治理实践


B 站我想大年夜家都熟悉吧,其实 B 站的爬虫网上一搜一大年夜堆。不过 纸上得来终觉浅,绝知此事要躬行,我码故我在。最终爬取到数据总量为 760万 条。

预备工作

起首打开 B 站,随便在首页找一个视频点击进去。惯例操作,打开开辟者对象。此次是目标是经由过程爬取 B 站供给的 api 来获取视频信息,不去解析网页,解析网页的速度太慢了并且轻易被封 ip。

勾选 JS 选项,F5 刷新

着手写码

好了,到这里代码就可以码起来了,经由过程 request 赓续的迭代获取数据,为了让爬虫更高效,可以应用多线程。

核心代码

  1. result = [] 
  2. req = requests.get(url, headers=headers, timeout=6).json() 
  3. time.sleep(0.6)     # 延迟,避免太快 ip 被封 
  4. try: 
  5.     data = req['data'
  6.     video = Video( 
  7.         data['aid'],        # 视频编号 
  8.         data['view'],       # 播放量 
  9.         data['danmaku'],    # 弹幕数 
  10.         data['reply'],      # 评论数 
  11.         data['favorite'],   # 收藏数 
  12.         data['coin'],       # 硬币数 
  13.         data['share']       # 分享数 
  14.     ) 
  15.     with lock: 
  16.         result.append(video) 
  17. except
  18.     pass 

迭代爬取

复制下来,去除没须要的内容,获得 https://api.bilibili.com/x/web-interface/archive/stat?aid=15906633 ,用浏览器打开,会获得如下的 json 数据

  1. urls = ["http://api.bilibili.com/archive_stat/stat?aid={}".format(i)  
  2.     for i in range(10000)] 
  3.  with futures.ThreadPoolExecutor(32) as executor:    # 多线程 
  4.      executor.map(run, urls) 

不要一次性爬取全部链接,我是应用两个过程,如许就是多过程+多线程了。一个过程一次大年夜概爬取 50w 条数据。100w 条数据的话大年夜概一个多小时吧。分多次爬取,分别将数据保存为不呵9依υ?件名,最后再汇总。


  推荐阅读

  Intel决定2020年封禁UEFI兼容模式:Windows 7将无法启动

Tech Neo技巧沙龙 | 11月25号,九州云/ZStack与您一路商量云时代收集界线治理实践 UEFI(同一可扩大固件接口)代替传统的BIOS已经有相当长一段时光了,这两者比较直不雅的区分方法就是看界>>>详细阅读


本文标题:如何快速爬取B站全站视频信息

地址:http://www.17bianji.com/lsqh/38984.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)