Python用数万条数据带大家看看到底是哪些人在反对996~

相关文件

想学Python的小伙伴可以关注小编的公众号【Python日志】
有很多的资源可以白嫖的哈,不定时会更新一下Python的小知识的哈!!
Python学习交流群:773162165

开发环境

Python版本:3.7.8
相关模块:
requests模块;
tqdm模块;
pyfreeproxy模块;
pyecharts模块;
以及一些python自带的模块。

环境搭建

安装Python并添加到环境变量,pip安装需要的相关模块即可。

数据爬取

数据爬取部分,我们利用Github官方提供的API来实现:

https://api.github.com/repos/{username}/{reponame}/stargazers?page={page}

另外,根据官方的接口文档,我们需要申请一个access_token,在请求头中添加:

headers = {
    'Accept': 'application/vnd.github.v3+json',
    'Authorization': f'token {access_token}',
}

否则的话,我们每个小时可以获取到的数据将会少很多。access_token的获取方式如下图所示:
在这里插入图片描述
数据爬取的核心代码如下:

'''run'''
def run(self):
    # 构造所有star的人的url
    star_urls = []
    for page in range(self.num_pages):
        url = self.api_url.format(self.username, self.reponame, page)
        star_urls.append(url)
    # 爬取所有用户链接
    user_info_urls, session = [], requests.Session()
    for url in tqdm(star_urls):
        while True:
            headers = self.getheaders()
            try:
                response = session.get(url, headers=headers)
                response_json = response.json()
                break
            except:
                session = requests.Session()
        if 'message' in response_json and \
            response_json['message'] == 'In order to keep the API fast for everyone, pagination is limited for this resource. Check the rel=last link relation in the Link response header to see how far back you can traverse.':
            break
        for item in response_json:
            if not isinstance(item, dict): 
                continue
            if ('url' in item) and (item['url'] not in user_info_urls):
                user_info_urls.append(item['url'])
    self.save(user_info_urls, 'user_info_urls')
    print(f'[INFO]: 共获得{len(user_info_urls)}条用户信息链接')
    # 爬取所有用户信息
    user_infos, session = [], requests.Session()
    for url in tqdm(user_info_urls):
        while True:
            headers = self.getheaders()
            try:
                response = session.get(url, headers=headers)
            except:
                session = self.getsession()
                continue
            if response.status_code == 200 and 'id' in response.json(): 
                break
            elif response.json()['message'] == 'Not Found':
                response = None
                break
            else:
                session = self.getsession()
        if response is None: continue
        info = response.json()
        user_infos.append(info)
    print(f'[INFO]: 共获得{len(user_infos)}条用户数据')
    self.save(user_infos, 'user_infos')

最终的运行效果如下:在这里插入图片描述
可以看到原始repo大概有261k的star:
在这里插入图片描述
说明官方给的接口应该是有限制的,最多只能拿到40k左右的数据,不过这也足够我们拿来做后续的数据可视化分析啦~

大功告成啦,完整源代码详见相关文件~

数据可视化

首先,我们来看看反对996的人主要是什么公司的:
在这里插入图片描述
由于大部分人都没有在主页填写自己的公司信息,所以爬取到的几万条数据里,有效的部分少之又少。从图上看,点赞的主力军还是高校学生,其次才是互联网大厂的员工。(可能在加班没时间点star?)

接下来,我们来看看反对996的人里有多少是在社区是有影响力的,这里我们以用户在Github上的粉丝数量作为评判该用户在社区是否有影响力的标准,最终的结果如下:在这里插入图片描述
可以发现,Github上还是有很多"大V"通过点赞来声援反对996的。

再来看看点赞的账户都是什么时候注册的吧:在这里插入图片描述
看来点赞的基本都是有多年从业经验的老程序员而不是刚注册的新号?图片再来看看点赞者的邮箱域名统计结果吧:
在这里插入图片描述

看来点赞的人很多都是可以上谷歌的啊,一想到前面统计的点赞的人里大部分是学生,就感觉事情似乎并不简单。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值