• 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()

    运行结果:

    用户头像:

    二、

    待续。。。

  • 相关阅读:
    .NET 压缩解压库发布,支持进度查看
    WPF 蒙罩层 LoadingPage
    WPF如何用TreeView制作好友列表、播放列表
    WPF多线程UI更新——两种方法
    .NET责任链模式(混合单例模式,模板方法模式)-----制作与扩展能力验证
    .NET单例模式-------各种写法&&验证
    迭代器模式和组合模式混用
    正确理解DTO、值对象和POCO
    理解POCO
    VM
  • 原文地址:https://www.cnblogs.com/wangyi0419/p/12612558.html
Copyright © 2020-2023  润新知