说到b站,往往就能想到二次元,在如今互联网强势的时代,b站脱颖而出,成为视频播放排行的一大亮点,动漫风格很多,很让人喜欢,起初我就是爱上了动漫,我也成为了b站的一员,不过如果你认为b站只能看动漫就out了!因为当你拿b站看动漫的时候,可能你的兄弟或者朋友已经在b站开始学习了,不得不说,b站学习是真的好,我基本上编程到现在都离不开b站!
所以在b站学完手艺,就要报答一下b站啦!(手动滑稽)
开始
本次我们呢,将会爬取b站高追番榜,因为一个番剧好不好看,取决于它的追番人数,(来自一个老番党的提示),因为有时候我看番,有些评分低的不一定很难看,所以这次我就爬b站追番榜吧!
爬虫步骤与思路
1.目标url2.发送请求3.解析数据4.清洗数据5.保存数据
理解这些,我们就开始操作吧!
首先
1.目标url
链接:最高追番榜链接
这里为了实现翻页,我们要进行抓包操作
这是我抓到的数据,是一堆js数据,然后再抓第二页发现了他们的规律,详细的话可以自己去实践(自己动手也很重要!!!),就是第一页的page=1,第二页为2…以此类推
获取了目标的url之后就简单了!
代码
里面有注释,我就不多说了,就是简单的jsonpath的使用,如果有不清楚jsonpath的可以看看此链接:
点我!!里面也有爬虫实战的3大练习,初学的可以去练练手,往后我会继续做b站的爬虫练习(偷偷的说下一章是爬取b站番剧top50排行榜 =.=)
import jsonpath import os from urllib.request import urlretrieve import requests import time #包装成函数 def url_list(id): #目标url url = 'https://api.bilibili.com/pgc/season/index/result?season_version=-1&area=-1&is_finish=-1©right=-1&season_status=-1&season_month=-1&year=-1&style_id=-1&order=3&st=1&sort=0&page={}&season_type=1&pagesize=20&type=1'.format(id) #模拟浏览器 headers = { 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.69 Safari/537.36'} #发送请求+解析数据 response=requests.get(url,headers=headers).json() name_list = jsonpath.jsonpath(response, '$..title') link_list=jsonpath.jsonpath(response,'$..cover') return (name_list,link_list) #文件名 text='b站最高追番榜' if not os.path.exists(text): os.mkdir(text) n=1 #保存100页,有需要的可以增多 for i in range(1,101): name_list, link_list = url_list(i) for name, link in zip(name_list, link_list): try: #这里是在爬图片的时候发现了一些名字的bug,用这个就能解决了 urlretrieve(link, text + '/' + (str(n) + (name.replace(':',' ')).split('/')[0]) + '.jpg') n += 1 print(name + '100%') #如果显示报错,可能就又是未知名字的问题,目前没有发现 except: #以数字命名 urlretrieve(link, text + '/' + str(n) + '.jpg') n+=1 print('第%d页爬取完毕,正在加载下一页...' % i) #等待第二页 time.sleep(2)
效果
是不是很简单呢,源码获取加群:1136192749