python爬虫的小应用

一、爬取b站用户信息

  本次爬取b站第1-10个用户的个人信息,包括昵称,性别,头像,粉丝数,播放数等。

 1 import requests
 2 import json
 3 import os
 4 
 5 
 6 vip_type = {0:'普通用户',1:'小会员',2:'大会员'}
 7 headers = {
 8     'Referer': 'https://space.bilibili.com',
 9     'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36'
10 }
11 
12 def download_face(url,mid,name):
13     ''' 下载头像 '''
14     print('正在下载用户头像...')
15     if not os.path.exists('b站用户头像'):
16         os.mkdir('b站用户头像') # 创建目录存放头像
17     img = requests.get(url,headers=headers).content # 获得头像的二进制源码
18     with open('b站用户头像/{}_{}.jpg'.format(mid,name),'wb') as f:
19         f.write(img)
20 
21 def get_user_ele_info(url):
22     '''获取用户基本信息'''
23     jsondata = requests.get(url).json()['data']
24     mid = jsondata['mid']
25     name = jsondata['name']
26     sex = jsondata['sex']
27     level = jsondata['level']
28     sign = jsondata['sign']
29     official = jsondata['official']['title']
30     vip_num = jsondata['vip']['type']
31     face_url = jsondata['face']
32     download_face(face_url,mid,name) #
33     print('用户UID:{}'.format(mid))
34     print('用户姓名:{}'.format(name))
35     print('用户性别:{}'.format(sex))
36     print('用户等级:{}'.format(level))
37     print('用户类型:{}'.format(vip_type.get(vip_num)))
38     print('用户个性签名:{}'.format(sign))
39     print('用户官方认证:{}'.format(official))
40 
41 def get_user_follow(url):
42     ''' __jp3获取用户关注数和粉丝数 '''
43     text_data = requests.get(url,headers=headers).text[6:-1] # str
44     # 获取的是非标准的json格式的数据,做一下字符串截取操作,去掉冗余数据
45     jsondata = json.loads(text_data) # 用json包重新加载一下字符串 ,变为dict类型
46     data = jsondata['data']   
47     following = data['following']
48     follower = data['follower']
49     print('用户关注数:{}'.format(following))
50     print('用户粉丝数:{}'.format(follower))
51 
52 def get_user_achieve(url):
53     ''' __jp4获取用户成就,如粉丝数、获赞数、播放数等 '''
54     text_data = requests.get(url,headers=headers).text[6:-1] 
55     jsondata = json.loads(text_data) 
56     data = jsondata['data']
57     video_views = data['archive']['view']
58     likes = data['likes']
59     print('用户获赞数:{}'.format(likes))
60     print('用户视频播放数:{}'.format(video_views))
61 
62 
63 def main():
64     for i in range(1,11):
65         url_ele_info = 'https://api.bilibili.com/x/space/acc/info?mid={}&jsonp=json'.format(i)
66         url_follow = 'https://api.bilibili.com/x/relation/stat?vmid={}&jsonp=jsonp&callback=__jp3'.format(i)
67         url_achieve = 'https://api.bilibili.com/x/space/upstat?mid={}&jsonp=jsonp&callback=__jp4'.format(i)
68         get_user_ele_info(url_ele_info)
69         get_user_follow(url_follow)
70         get_user_achieve(url_achieve)
71         print('-'*100)
72         
73 if __name__ == '__main__':
74     main()

运行结果:

用户头像:

 

二、

待续。。。

posted @ 2020-04-01 14:49  天青色wy  阅读(437)  评论(0编辑  收藏  举报