本人今天接了个阿里的电话,感觉凉凉,心情不好,准备开始学习一直滞后的python学习计划。
自身本来对JAVA很熟悉,所以学python也没什么太大问题,花了2个小时把《简明python教程》扫了一遍,感觉确实有很多和JAVA不一样的地方,一开始很难接受,慢慢习惯就好了。
由于学习python今天是第一天,很多东西都只是凭着“语言的共同性”来解决的,所以有很多地方不规范,还望各位指正
下面进入正题
B站本身就有图片的资源接口,省了我们不少事
可以看到,api.vc.bilibili.com/link_draw/v2/Doc/index 这个接口本身就有图片的地址,接下来就方便很多了
我们访问该接口 依次爬取图片地址进行下载就可以了
爬取用requests包进行,这个包比python自带的urllib更好用
requests.get()方法需要的参数:
扫描二维码关注公众号,回复:
1534734 查看本文章
url='https://api.vc.bilibili.com/link_draw/v2/Doc/index' params={ 'type':'recommend', 'page_num':0, 'page_size':45 } headers={ 'User-Agent':'Mozilla/5.0(WindowsNT6.1)AppleWebKit/537.36(KHTML,likeGecko)Chrome/58.0.3029.110Safari/537.36', 'Accept-Encoding':'gzip,deflate' }
params是该接口需要的参数,其中type有三种类型,用来表示图片的排序:“recommend”即为默认,“hot”表示按热度排序,“new”表示按照时间排序。page_num和page_size不用解释了
r = requests.get(url=url,params=params, headers = headers) html = r.text decodejson = json.loads(html) c = decodejson.get("data").get("items") i = 0; print(len(c)) while i <len(c): item = c[i].get("item") title = item.get("title") pictures_url = item.get("pictures")[0].get("img_src") save_img(img_url=pictures_url, file_name=title) i+=1 if i >50: break
可以看到,python确实是很方便,requests.get()直接就可以了,其中的test属性就是页面的内容,也就是获取的API中responsebody中的内容。
为了获取的方便,我们再调用json包,将内容转换为json,接下来就是一层层的获取和遍历过程。
最后,贴一下图片保存的代码
def save_img(img_url,file_name,file_path='D:\图\B站爬虫测试\\'): #将图片保存至磁盘 html = requests.get(img_url) #获取图片的后缀名 file_suffix = os.path.splitext(img_url)[1] with open(file_path+file_name+file_suffix,'wb')as file: file.write(html.content) print("下载{}成功".format(file_name))
该方法包括三个参数,第一个参数是图片的地址,第二个参数是图片的名字,在解析json的时候顺便保存了名字,第三个参数是图片的路径,可以按照个人需要设置
‘wb’表示二进制写入文件