当前位置:   article > 正文

Python菜鸟教程(一)-爬b站数据_爬b站爬不到有用的数据

爬b站爬不到有用的数据

BeautifulSoup

BeautifulSoup- 我们爬去网站主要用到的库

安装BeautifulSoup
pip install beautifulsoup4
  • 1

安装了python的同学应该都知道python的包管理工具pip,这里就不赘述了。

切入点

爬网站主要还是找到一个url,当然有api是最好的,很容易就可以爬到自己想要的数据:

url:http://api.bilibili.com/archive_stat/stat?aid=xxx
  • 1

# ps
b站这个请求太频繁的拉数据的话,会被封ip的,我现在正在用手机开着热点,一边在拉数据,一边在写这篇教程
  • 1
  • 2

大概抓1w条左右会被检测出来,然后封个5分钟左右ip,很多大佬说,做爬虫要多弄个代理,不会玩。

google了一下,b站用的大概是爬取间隔自适应。就是已经限制了你这个IP的抓取,就不要傻傻重复试,怎么滴也得休息一会。网易云音乐操作起来比较简单,sleep一下就好了。其实sleep的间隔应该按情况累加,比如第一次sleep 10秒,发现还是被约束。那么就sleep 20秒… 这个间隔的设置已经自适应的最终效果是经验值。

贴代码

import json
from bs4 import BeautifulSoup
from urllib import request

def getScript(url):
        head = {}
        # 这边是要拼个请求头的
        head['User-Agent'] = 'Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166  Safari/535.19'
        req = request.Request(url, headers = head)
        response = request.urlopen(req)
        html = response.read()
        soup = BeautifulSoup(html, 'lxml')
        data = json.loads(soup.text)
        if (data.get("code") ==40003):
            return False;
        else:
            return data.get("data");

if __name__=="__main__":
    for i in range(159007,754613):
        url = 'http://api.bilibili.com/archive_stat/stat?aid='+str(i)
        str1 = getScript(url)
        if str1:
             # IO操作
            with open('D:/result.txt','a+',encoding='utf-8', errors='ignore') as f:
                  f.write(str(str1))
            print(str1)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

爬取的部分txt

bilibili.txt

一夜之后

经过一夜的爬取,让我们看下爬取的数据

SELECT COUNT(1) FROM video
-- 216997

select aid av号,`view` 播放量,danmaku 弹幕,favorite 喜欢,coin 硬币,`share` 分享 from video where `view`=(select max(`view`) from video);
-- 225094   8024979 471856  25306   15497   10924
  • 1
  • 2
  • 3
  • 4
  • 5

抓取到的这个av号去bilibili看一下,居然是天降之物,居然不是fate!

让我们看一下fate的链接:

https://bangumi.bilibili.com/anime/1650
  • 1

– 哇,一声就哭出来了,mmp

然后搜一下天降之物,有两个链接:

http://www.bilibili.com/video/av225094/
https://bangumi.bilibili.com/anime/971/
  • 1
  • 2

推断:

b站可能把高点击量的视频都用,一下链接了:

https://bangumi.bilibili.com/anime/id号/
  • 1

可能也想由http转https,让网站更安全。

好吧,那接下来我们的目标很明确了,就是抓https://bangumi.bilibili.com/anime/id号/这个链接的数据了。

后记

python还是非常有意思的,尤其是从爬虫这里入门。

跟java比起来更加的轻巧,刚开始学,有些不会的东西也不需要太深究,跟着大佬们敲一敲。

备注一些学习python的资料:

廖雪峰 - Python教程

GitHub上的一些资源

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小桥流水78/article/detail/912765
推荐阅读
相关标签
  

闽ICP备14008679号