哔哩哔哩上有一个相簿板块,里面有很多绘画和摄影,自己动手一张一张保存太慢,于是想到了python爬虫。
今天就用python来写个爬虫,爬取每月月榜上的小姐姐,一劳永逸。
爬虫步骤:
1.在bilibili上找到API接口
2.使用requests去访问接口,获取json字典
3.根据json内容,获取地址来下载图片
1.先定义请求头,模仿浏览器去访问网站;
2.定义函数获取json
3.定义下载器
4.通过循环爬取json的图片地址下载图片
效果图:
s私信小编01 获取此项目数十套PDF!
具体代码如下:
import requests
import os
#定义请求头
headers={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:69.0) Gecko/20100101 Firefox/69.0'
}
def get_json(url):
#定义api中的关键字
params={
'biz':'2',
'category':'cos',
'rank_type':'month',
'date':'2019-09',#修改日期可获得不同月榜
'page_num':'0',
'page_size':'50'
}
#访问逻辑,处理异常
try:
html=requests.get(url,params=params,headers=headers)
return html.json()
#print(html.json())
except:
print('请求出错...')
def downloader(url,path):
#初始化大小
size=0
#下载视频
response=requests.get(url,headers=headers,stream=True)
#构造下载器
chunk_size=1024
#文件大小
content_size=pic[a]['img_size']
print('[图片大小]:%0.2f MB'%(content_size/chunk_size))
#文件处理
if response.status_code==200:
with open(path,'wb') as f:
#迭代相应数据
for data in response.iter_content(chunk_size=chunk_size):
f.write(data)
size+=len(data)
if __name__=="__main__":
try:
os.mkdir('./图片')
except:
pass
for i in range(10):
url='https://api.vc.bilibili.com/link_draw/v2/Doc/ranklist?'
html=get_json(url)
infos=html['data']['items']
for info in infos:
a=0
pic=info['item']['pictures']
title=info['item']['title']
try:
a+=i
pic_url=pic[a]['img_src']
path='./图片/%s.jpg' % (title+str(a))
downloader(pic_url,path)
print(path)
print('下载成功')
except:
print('下载失败...')
网友评论