说到b站,往往就能想到二次元,在如今互联网强势的时代,b站脱颖而出,成为视频播放排行的一大亮点,动漫风格很多,很让人喜欢,起初我就是爱上了动漫,我也成为了b站的一员,不过如果你认为b站只能看动漫就out了!因为当你拿b站看动漫的时候,可能你的兄弟或者朋友已经在b站开始学习了,不得不说,b站学习是真的好,我基本上编程到现在都离不开b站!
所以在b站学完手艺,就要报答一下b站啦!(手动滑稽)
开始
本次我们呢,将会爬取b站高追番榜,因为一个番剧好不好看,取决于它的追番人数,(来自一个老番党的提示),因为有时候我看番,有些评分低的不一定很难看,所以这次我就爬b站追番榜吧!
爬虫步骤与思路
1.目标url
2.发送请求
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)
效果
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/66868.html