python 分析 知乎粉丝数据
昨天花了一下午写了一个小爬虫,用来分析自己的粉丝数据。这个真好玩!今天帮了群里好多大V也爬了他们的数据。运行速度:每分钟5千粉丝以上。暂时先写成这样,这两天要准备补考,没有时间继续玩这个。
下次要改进的地方:1、多线程 2、scrapy 3、深度数据 4、分布式爬虫
希望实现的功能:
- 1、地区、教育程度、注册时间、送粉识别、颜值检测
- 2、导出 h5超秀的界面 和完美的 xlsx 数据
- 3、对内容提出建议
- 4、对接微信后台实现自动化
下面是源码,经2019年8月21日测试可用:
from selenium.webdriver import Chrome,ChromeOptions
from requests.cookies import RequestsCookieJar
from lxml import etree
from pandas import DataFrame
import json,time,requests,re,os,clipboard
def sele_input_zhihu():
'首次登陆知乎,需要输入账号密码'
# 防止检测
option = ChromeOptions()
option.add_experimental_option('excludeSwitches', ['enable-automation'])
driver = Chrome(options=option)
# 登录
driver.get("http://www.zhihu.com/")
name=input("请输入手机号或邮箱:")
pwd=input("请输入密码:")
needPass=driver.find_element_by_xpath("//div[@class='SignFlow-tab']")
needPass.click()
driver.find_element_by_name("username").send_keys(name)
driver.find_element_by_name("password").send_keys(pwd)
submitBtn = driver.find_element_by_xpath("//button[@type='submit']")
submitBtn.click()
time.sleep(5)
# 保存cookies
cookies = driver.get_cookies()
with open("cookies.json", "w") as fp:
json.dump(cookies, fp)
print("保存cookies成功!")
driver.close()
def login_zhihu(s):
'利用保存的cookies登录知乎'
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36'
}
s.headers=headers
cookies_jar = RequestsCookieJar()
with open("cookies.json","r")as fp:
cookies = json.load(fp)
for cookie in cookies:
cookies_jar.set(cookie['name'], cookie['value'])
s.cookies.update(cookies_jar)
print("登录成功!")
# 浅数据处理
# "users":{(.*), "questions":{}
def parse_infos(session,url,id):
content = session.get(url).text
info_json=re.search(r'"users":(.*}}),"questions":{}',content).group(1)
json_dict=json.loads(info_json)
items=[]
for key in json_dict.keys():
item = json_dict[key]
if "name" in item.keys() and key!=id:
custom = "是" if(item["useDefaultAvatar"]==False) else "否"
thetype="普通用户" if(item["isOrg"]==False) else "机构号"
gender="女" if(item["gender"]==0) else ("男" if (item["gender"]==1)else "未知")
vip="否"if(item["vipInfo"]["isVip"]==False) else "是"
items.append([item["urlToken"] , item["name"] , custom , item["avatarUrl"], item["url"] , thetype , item["headline"] , gender , vip , item["followerCount"] , item["answerCount"] , item["articlesCount"]])
return items
def main():
# 登录
if not os.path.exists("cookies.json"):
print("未登录账户,请登录!")
sele_input_zhihu()
session=requests.session()
login_zhihu(session)
# 需要的数据
zhuye_url="https://www.zhihu.com/people/you-yi-shi-de-hu-xi/activities" # 这个地方用来输入主页链接
zhuye=re.match(r"(.*)/activities$",zhuye_url).group(1)
id = re.match(r".*/(.*)$",zhuye).group(1)
followers_url=zhuye+r"/followers?page={}"
# 分析粉丝个数和页码
html = etree.HTML(session.get(zhuye_url).text)
text=html.xpath("//div[@class='NumberBoard FollowshipCard-counts NumberBoard--divider']//strong/text()")[1]
follows = int("".join(text.split(",")))
pages = follows//20+1
print("关注者 "+str(follows)+"人,共 "+str(pages)+"页数据!")
# 获取导出浅数据
all_info = []
for i in range(1,pages+1):
infos_url = followers_url.format(i)
print("正在获取第 "+str(i)+" 页数据...")
array = parse_infos(session,infos_url,id)
all_info+=array
many=len(all_info)
print("数据获取完成,共"+ str(many)+" 条数据!")
data = DataFrame(data=all_info,columns=["id", "用户名", "自定义头像", "头像url", "主页链接", "类型", "一句话描述", "性别", "盐选会员", "粉丝总数", "回答数", "文章数"])
data.to_csv(id+"_浅数据.csv",encoding="utf-8-sig")
print("数据已导出到"+ id+"_浅数据.csv!")
# 生成粉丝数据报告
wood=org=female=money=male=f2k=f5k=f10k=gfemale=gmale=0
for info in all_info:
if info[2]=="否" and info[9]==0 and info[10]<=2 and info[11]<=2: wood+=1
if info[5]=="机构号": org+=1
if info[7]=="女":
female+=1
if info[9]>=20: gfemale+=1
else:
if info[9]>=50: gmale+=1
if info[7]=="男": male+=1
if info[8]=="是": money+=1
if info[9]>=10000: f10k+=1
elif info[9]>=5000: f5k+=1
elif info[9]>=2000: f2k+=1
report="*"*40+"\n浅粉丝数据快览:在你所有 "+str(many)+" 个粉丝中:\n"+"共有僵尸粉 "+str(wood)+" 个,占比 "+"{:.4%}".format(wood/many)+" ,这可是相当"+(" 低 " if (wood/many)<0.2 else " 高 ")+"的比例。\n"+"另外,粉丝的男女比例为 1 : "+"{:.3}".format(female/male)+" ,看来你深受广大"+(" 女 " if (female>=male) else " 男 ")+"性同胞的喜爱!\n"+"靓女"+str(gfemale)+"人,靓仔"+str(gmale)+"人 【只统计有颜值的】\n"+"在你的所有粉丝里,氪金学习的用户有 "+str(money)+" 个,占比 "+"{:.3%}".format(money/many)+",看来您的粉丝多为"+("高"if(money/many>0.045) else" 低 ")+"收入用户!\n"+" ◉ 粉丝10K+有 "+str(f10k)+" 人;\n"+" ◉ 粉丝5K-10K有 "+str(f5k)+" 人;\n"+" ◉ 粉丝2K-5K有 "+str(f2k)+" 人;\n"
if org>=1:
report+="除此之外,你的粉丝中还有 "+str(org)+" 位机构号!详细的报告快去 浅数据.csv 里看看吧!\n"
clipboard.copy(report)
print(report)
if __name__=="__main__":
main()
运行截图:
这是我今天的粉丝报告:
浅粉丝数据快览:在你所有 9934 个粉丝中:
共有僵尸粉 2091 个,占比 21.0489% ,这可是相当 高 的比例。
另外,粉丝的男女比例为 1 : 0.352 ,看来你深受广大 男 性同胞的喜爱!
靓女123人,靓仔354人 【只统计有颜值的】
在你的所有粉丝里,氪金学习的用户有 477 个,占比 4.802%,看来您的粉丝多为高收入用户!
◉ 粉丝10K+有 11 人;
◉ 粉丝5K-10K有 7 人;
◉ 粉丝2K-5K有 17 人;
除此之外,你的粉丝中还有 1 位机构号!详细的报告快去 浅数据.csv 里看看吧!
python 分析 知乎粉丝数据的更多相关文章
- EDG夺冠!用Python分析22.3万条数据:粉丝都疯了!
一.EDG夺冠信息 11月6日,在英雄联盟总决赛中,EDG战队以3:2战胜韩国队,获得2021年英雄联盟全球总决赛冠军,这个比赛在全网各大平台也是备受瞩目: 1.微博热搜第一名,截止2021-11-1 ...
- Python数据分析练手:分析知乎大V
原文链接:https://zhuanlan.zhihu.com/p/92768131?utm_source=tuicool&utm_medium=referral 知乎,可以说是国内目前最大的 ...
- Python股票分析系列——基础股票数据操作(一).p3
该系列视频已经搬运至bilibili: 点击查看 欢迎来到Python for Finance教程系列的第3部分.在本教程中,我们将使用我们的股票数据进一步分解一些基本的数据操作和可视化.我们将要使用 ...
- Twitter数据挖掘:如何使用Python分析大数据
我们可以创建变量来存放待拉取的微博数量(即count),以及待拉取的用户(即name).然后用这两个参数调用user_timeline()函数.下面是更新后的代码(注意,在代码的顶部应该保持认证和AP ...
- Twitter数据挖掘:如何使用Python分析大数据 (3)
让我们来拉取Twitter账号@NyTimes的最近20条微博. 我们可以创建变量来存放待拉取的微博数量(即count),以及待拉取的用户(即name).然后用这两个参数调用user_timeline ...
- 吴裕雄--天生自然python学习笔记:WEB数据抓取与分析
Web 数据抓取技术具有非常巨大的应用需求及价值, 用 Python 在网页上收集数据,不仅抓取数据的操作简单, 而且其数据分析功能也十分强大. 通过 Python 的时lib 组件中的 urlpar ...
- Python分析数据难吗?某科技大学教授说,很难但有方法就简单
用python分析数据难吗?某科技大学的教授这样说,很难,但要讲方法,主要是因为并不是掌握了基础,就能用python来做数据分析的. 所谓python的基础,也就是刚入门的python学习者,学习的基 ...
- 2020不平凡的90天,Python分析三个月微博热搜数据带你回顾
前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:刘早起早起 PS:如有需要Python学习资料的小伙伴可以加点击下方链 ...
- 【可视化分析案例】用python分析B站Top100排行榜数据
一.数据源 之前,我分享过一期爬虫,用python爬取Top100排行榜: 最终数据结果,是这样的: 在此数据基础上,做python可视化分析. 二.数据读取 首先,读取数据源: # 读取csv数据 ...
随机推荐
- Cocos2d-x视频教程
目录 1. 我的技术专栏 2. 相关推荐 3. 下载链接 4. cocos2d-xx Lua+JS+C++教学视频 5. 杨丰盛Cocos2D-X游戏课程 6. [Cocos2d-x]塔防游戏开发实战 ...
- linux强制用户下线命令
linux强制用户下线命令 前提:必须是root权限操作:(1)使用who查看目前有哪些用户登录了服务器,见下图(2)使用pkill -kill -t pts/1命令踢出第一个用户.命令解释:pt ...
- python中常用的时间操作
python中常用的时间模块有time和datetime,以下是这两个模块中常用的方法: #先引入模块 import timefrom datetime import datetiem, timezo ...
- 完整项目:网上图书商城(一、MySQL数据库设计)未完
一.建立数据库 CREATE DATABASE IF NOT EXISTS bookshop CHARACTER utf8; 二.建立数据库表 1.建立用户表 #用户表(用户id号,用户名,用户密码, ...
- 13DBUtils工具类
如果只使用JDBC进行开发,我们会发现冗余代码过多,为了简化JDBC开发,本案例我们讲采用apache commons组件一个成员:DBUtils. DBUtils就是JDBC的简化开发工具包.需要项 ...
- Spring的事物原理
在Spring中把非功能性的事物管理代码以切面的形式进行管理,只需要声明事物即可启用事物管理. 本质:最终执行的还是java.sql.Connection的setAutoCommit(),commit ...
- random模块 os模块
# random# import random# random.random() # 大于0且小于1之间的小数# random.randint() # 大于等于1且小于等于3之间的整数# random ...
- Ckeditor IE下粘贴word中图片问题
自动导入Word图片,或者粘贴Word内容时自动上传所有的图片,并且最终保留Word样式,这应该是Web编辑器里面最基本的一个需求功能了.一般情况下我们将Word内容粘贴到Web编辑器(富文本编辑器) ...
- ueditor 复制word里面带图文的文章,图片可以直接显示
图片的复制无非有两种方法,一种是图片直接上传到服务器,另外一种转换成二进制流的base64码 目前限chrome浏览器使用,但是项目要求需要支持所有的浏览器,包括Windows和macOS系统.没有办 ...
- [CSP-S模拟测试]:嘟嘟噜(约瑟夫问题)
题目描述 由于众所周知的原因,冈部一直欠真由理一串香蕉.为了封上真由理的嘴,冈部承诺只要真由理回答出这个问题,就给她买一车的香蕉:一开始有$n$个人围成一个圈,从$1$开始顺时针报数,报出$m$的人被 ...