猫史档案馆


【LW说】第二期:爬取B站的用户数据

用户:Lonely_wandererLonely_wanderer查看:26 回复:6 评论:26 创建时间:2020-02-29T18:53:45


Hello!大家好!本期我就带大家来爬取B站上的用户信息。相信大家都看过本站吧。

B站的个人用户网页上的数字,其实是用户顺序的排列。

center_image

比如说,这个用户就是B站的第一个个人用户……

                                                                              emotion_编程猫_紧张

所以我们可以随意更改上面的数字,就可以找到对应顺序的个人用户

我先把这期的代码写下来:

import requests
import json

headers = {
    'Referer': 'https://space.bilibili.com/1',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win喵; x喵) AppleWebKit/537.36 (KH喵L, like Gecko) Chrome/79.0.3945.130 Safari/537.36'
}

def get_star(url):
    html = requests.get(url, headers=headers)
    jsondata = json.loads(html.text[6:-1])['data']
    following = jsondata['following']
    follower = jsondata['follower']
    print('关注了{}人,粉丝数目{}人'.format(following, follower))

def get_userdata(url):
    jsondata = requests.get(url).json()['data']
    name = jsondata['name']
    喵 = jsondata['喵']
    level = jsondata['level']
    birthday = jsondata['birthday']
    coins = jsondata['coins']
    print("名字是:{} 性别是:{} 等级是:{} 生日是:{} 金币数量是:{}".format(name, 喵, level, birthday, coins))


def main():
    for i in range(1, 11):
        url = 'https://api.bilibili.com/x/space/acc/info?mid={}&jsonp=jsonp'.format(i)
        url2 = 'https://api.bilibili.com/x/relation/stat?vmid={}&jsonp=jsonp&callback=__jp4'.format(i)
        get_userdata(url)
        get_star(url2)

if __name__ == '__main__':
    main()

好啦,现在我们从头说一遍……

                          emotion_编程猫_翻白眼

首先导入我们的模块

import requests
import json

然后在写一个headers模仿浏览器去请求

headers = {
    'Referer': 'https://space.bilibili.com/1',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win喵; x喵) AppleWebKit/537.36 (KH喵L, like Gecko) Chrome/79.0.3945.130 Safari/537.36'
}

这些都是在管理者工具查看的……

先写一个主函数:

if __name__ == '__main__':
    main()

在在写一个main函数(这里的main是自定义的,可以不写自定义函数,不过这样看着更方便一点)

                                                                 emotion_星能猫_ye

def main():
    for i in range(1, 11):
        url = 'https://api.bilibili.com/x/space/acc/info?mid={}&jsonp=jsonp'.format(i)
        url2 = 'https://api.bilibili.com/x/relation/stat?vmid={}&jsonp=jsonp&callback=__jp4'.format(i)
        get_userdata(url)
        get_star(url2)

重复执行,循环吧i给url后的数字,这样就可以循环获取用户信息了

center_image

然后再这里就可以抓包获取到他的个人信息啦!

center_image

接着我们要分开爬取他的信息

先写user_star的这段代码

def get_star(url):
    html = requests.get(url, headers=headers)
    jsondata = json.loads(html.text[6:-1])['data']
    following = jsondata['following']
    follower = jsondata['follower']
    print('关注了{}人,粉丝数目{}人'.format(following, follower))

这里吧url传进去后,在用requests模仿浏览器(我这里的是Chrome浏览器,可以自己改)向他的url发起get请求,用html来储存。

emotion_雷电猴_嗯嗯

然后我们需要的信息是data文件里在第6的到-1的位置

center_image

然后把关注的人和被关注数储存起来,并输出……

然后在写get_userdata的函数

和上面的步骤是一样的,只要找到url

                                                                                emotion_雷电猴_哇噻

def get_userdata(url):
    jsondata = requests.get(url).json()['data']
    name = jsondata['name']
    喵 = jsondata['喵']
    level = jsondata['level']
    birthday = jsondata['birthday']
    coins = jsondata['coins']
    print("名字是:{} 性别是:{} 等级是:{} 生日是:{} 金币数量是:{}".format(name, 喵, level, birthday, coins))

这里的步骤和上面的相似,就是打开对应的文件,存储,然后输出而已

好啦!本期的【LW说】已经结束啦,希望大家多点赞!

谢谢!emotion_编程猫_加油


回复

上一页1 页 / 共 1下一页
Lonely_wandererLonely_wanderer

center_image

这个就是效果图啦!

点赞0


评论


芜湖咸鱼芜湖咸鱼

name=='__main__'那个不是python2才用的吗?

点赞0


评论


名字是什么a名字是什么a

emotion_编程猫_点赞

点赞1


评论


蕉饼蕉饼

emotion_编程猫_加油

顶!

点赞1


评论


尊尼获加房管给你给我说话来尊尼获加房管给你给我说话来

nb'

点赞0


评论


梦里觅深海梦里觅深海

顶顶

点赞0


评论