Python菜鸟教程(一)-爬b站数据

来源:互联网 发布:华康字体淘宝可以用吗 编辑:程序博客网 时间:2024/05/22 08:23

BeautifulSoup

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

安装BeautifulSoup

pip install beautifulsoup4

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

切入点

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

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

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

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

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

贴代码

import jsonfrom bs4 import BeautifulSoupfrom urllib import requestdef 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)

爬取的部分txt

bilibili.txt

一夜之后

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

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

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

让我们看一下fate的链接:

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

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

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

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

推断:

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

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

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

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

后记

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

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

备注一些学习python的资料:

廖雪峰 - Python教程

GitHub上的一些资源

原创粉丝点击