前言
如何使用python对腾讯云开发者社区各位创作者,进行一个区域和技术偏好分析。作为数据分析的课题,我们首先想到的就是,如何去收集创作者们的区域和技术偏好数据。
浏览腾讯云开发者社区的数据展示设计,发现在个人主页就能收集到区域和技术偏好数据。那么我们就要考虑如何进入到个人主页。
数据采集
通过对个人主页的url进行分析,个人主页是由一个固定的base_url和用户的uid组成的,也就是说获取到用户的uid就能进入个人主页。现在的问题就变成了如何获取所有创作者的uid。
开发者社区没有提供一个全量创作者展示页面,所以我们只能另辟蹊径。在开发者社区的rank榜上,我们可以获取到50个创作者的信息。
rank页面
通过控制台对rank榜单进行数据采集前的分析,发现创作者的名称和uid就放在了html中,也就是说可以通过访问rank榜单的url,解析html就能获取数据。
当点击下一页的时候,创作者的数据是使用xhr异步请求然后渲染的,也就是我常说的“页面未刷新,数据已变化”。
所以归根结底,html中只有首页10个创作者的数据,要想获取每一页的数据,我们最终还是要对api进行请求。通过请求返回的json数据,我们可以获取到每一页用户的uid,然后通过base_url + uid再次发起请求,就可以进入创作者的个人主页。
对个人主页进行分析,创作者的区域和技术偏好标签都能在html中获取。 在下面的数据分析中,只基于rank页面50个创作者,如果想要更好的数据,可以从开发者社区首页的推荐入手,获取更多创作者,然后进行去重处理。
区域和技术偏好数据
区域和技术偏好的数据采集都是最基础的html的解析,常见的python模块有BS4和Xpath,我这里使用的scrapy的Selector。
技术偏好标签数据就是对nav下所有a标签的文本提取。
tags = '|'.join(response.css('nav.com-tag-v2-list a::text').extract())
而区域标签就是对li标签进行提取。
在区域数据提取的过程中,我们发现class为uc-user-info的li标签有好几个,所以第一个方法就是使用css提取所有li标签,然后通过index来找到区域所在的li,来提取数据。
我个人不建议这种写法,因为不优雅。我们观察区域数据所在的li下,有一个class为address的i子标签,这个i标签是整个页面唯一的。所以我们可以先定位i标签,然后再定位到父标签li,最后提取li的文本信息来获取区域。
city = ''.join(response.css('i.address').xpath('..').css(' ::text').extract()).replace(' ', '')
通过css来获取i,通过xpath定位到父标签li,然后在通过css提取文本数据,最后使用replace将空格替换掉,当然有的创作者未填写区域,那就只能将这部分数据的区域置为空。
输出数据,并将数据输出成csv格式。
data = {
"uid": uids,
"nickname": nicknames,
"avatarUrl": avatarUrls,
"tag":