思路:

1.手工查找一些僵尸用户

2.对僵尸用户的关注、粉丝列表进行多层遍历获取大量候选用户集

3.手工标注僵尸用户

技术难点在于第二步,工程量在第三步

1.手工查找僵尸用户

通过在微博手工查找,发现僵尸用户如下:

其特征较为明显、关注多,粉丝少,几乎没有活跃度

2.迭代遍历僵尸用户关注粉丝列表

参考此前文章:https://blog.csdn.net/weixin_43906500/article/details/115919312

相关代码略有修改,并封装为函数库,如下

2.1获取粉丝关注

get_follow_fan.py

import re
from urllib import request
import urllib
import code_weibo.config as config
import jsondef get_follow_fan(o_id,num=5):headers = config.get_headers()add = urllib.request.Request(url='https://weibo.com/u/%s' % o_id, headers=headers)r = urllib.request.urlopen(url=add, timeout=10).read().decode('utf-8')p_id = re.findall(r'CONFIG\[\'page_id\']=\'(\d+)\'',r)[0]follow_data = []fan_data = []dic_follow_fan = {}for i in range(1,num+1):add = urllib.request.Request(url='https://weibo.com/p/%s/follow?page=%d' % (p_id, i), headers=headers)r = urllib.request.urlopen(url=add, timeout=10).read().decode('utf-8')follows = re.findall(r'action-type=\\"itemClick\\" action-data=\\"uid=(\d+)&fnick=(.*?)&',r)print("关注:")print(len(follows))if(len(follows)==0):breakfor follow in follows:dic = {}dic["uid"] = follow[0]dic["name"] = follow[1]follow_data.append(dic)for i in range(1,num+1):add = urllib.request.Request(url='https://weibo.com/p/%s/follow?relate=fans&page=%d' % (p_id, i), headers=headers)r = urllib.request.urlopen(url=add, timeout=10).read().decode('utf-8')fans = re.findall(r'action-type=\\"itemClick\\" action-data=\\"uid=(\d+)&fnick=(.*?)&', r)print("粉丝:")print(len(fans))if(len(fans)==0):breakfor fan in fans:if(fan[0]=="2671109275"):continuedic = {}dic["uid"] = fan[0]dic["name"] = fan[1]fan_data.append(dic)dic_follow_fan["follows"] = follow_datadic_follow_fan["fans"] = fan_datareturn dic_follow_fanif __name__ == '__main__':dic_follow_fan = get_follow_fan("6598708078",num=5)print(dic_follow_fan)json_f = open("../data/dic_follow_fan_7006403277.json", "w")json.dump(dic_follow_fan, json_f, indent=4)

通过编写代码,迭代掉用上述代码,实现获取大量僵尸用户候选集

一个僵尸用户可查找100关注100粉丝,由于样本没有粉丝,故在关注列表遍历,可遍历用户规模大约在10000数量级(100*100*2)

2.2获取候选僵尸用户集

其中重点需要关注的地方在于初始用户的选取,根据分析僵尸用户主要分为两类,一类是具有大量关注少量粉丝的普通僵尸用户,一类是具有大量粉丝,少量关注,但微博特征表现为僵尸特征

根据分析

当初始用户选取第一类僵尸用户时,第一层大多为第二类僵尸用户,第二层用户则为第一类僵尸用户,样本特征效果不佳

当初始用户选取第二类僵尸用户时,第一层存在不少第一类僵尸用户,第二层用户中会出现大量第一类僵尸用户,样本特征效果好

调用代码如下

get_corpse_users.py

import json
from code_weibo import get_follow_fanuid = "5737286648"
dic_all = []
dic_follow_fan = get_follow_fan.get_follow_fan(uid)
print(dic_follow_fan)
json_f = open("users_data/dic_follow_fan_%s.json" % uid, "w")
json.dump(dic_follow_fan, json_f, indent=4)
follows = dic_follow_fan["follows"]
fans = dic_follow_fan["fans"]
i = 1
for follow in follows:dic_item = {}print("第%d页"%i)i = i + 1uid_item = follow["uid"]name_item = follow["name"]print(uid_item)dic_follow_fan = get_follow_fan.get_follow_fan(uid_item)print(dic_follow_fan)dic_item["uid"] = uid_itemdic_item["name"] = name_itemdic_item["data"] = dic_follow_fandic_all.append(dic_item)json_f = open("users_data/dic_follow_all_%s_new.json" % uid, "w")
json.dump(dic_all, json_f, indent=4)

数据展示:

3.标记僵尸用户集

标记僵尸数据集,借助此前获得的僵尸用户候选集,并利用selenium技术辅助标记,最终实现两类僵尸用户的标记

代码如下所示

mark_corpse_users.py

import json
from code_weibo import get_user_info
from selenium import webdriverbrowser = webdriver.Firefox()
# 获取 selenium cookies方法
# browser.get("https://weibo.com/u/2828585100")
# input()
# browser.get("https://weibo.com/u/2828585100")
# print(browser.get_cookies())
# 添加cookies
cookies = [{'name': '_s_tentry', 'value': 'passport.weibo.com', 'path': '/', 'domain': '.weibo.com', 'secure': False, 'httpOnly': False, 'sameSite': 'None'}, {'name': 'Apache', 'value': '6794026294436.286.1620953056338', 'path': '/', 'domain': '.weibo.com', 'secure': False, 'httpOnly': False, 'sameSite': 'None'}, {'name': 'SINAGLOBAL', 'value': '6794026294436.286.1620953056338', 'path': '/', 'domain': '.weibo.com', 'secure': False, 'httpOnly': False, 'expiry': 1936313056, 'sameSite': 'None'}, {'name': 'ULV', 'value': '1620953056359:1:1:1:6794026294436.286.1620953056338:', 'path': '/', 'domain': '.weibo.com', 'secure': False, 'httpOnly': False, 'expiry': 1652057056, 'sameSite': 'None'}, {'name': 'WBtopGlobal_register_version', 'value': '2021051408', 'path': '/', 'domain': 'weibo.com', 'secure': False, 'httpOnly': False, 'sameSite': 'None'}, {'name': 'SCF', 'value': 'AjA2nZTlgOEISRLSh7zaUGcHLSancs_A9StQ9B2X8729_poa7MN5uq7XgzVrX_6mQYsMVP_dyuS2LHyLSvhRq84.', 'path': '/', 'domain': '.weibo.com', 'secure': True, 'httpOnly': True, 'expiry': 1936313100, 'sameSite': 'None'}, {'name': 'SUB', 'value': '_2A25NmbhcDeRhGeBL4loW8CbMzDSIHXVu7q6UrDV8PUNbmtAKLRT7kW9NRq1zk3_SB65S9z0QcCTqmiRmzO-0TZQU', 'path': '/', 'domain': '.weibo.com', 'secure': True, 'httpOnly': True, 'sameSite': 'None'}, {'name': 'SUBP', 'value': '0033WrSXqPxfM725Ws9jqgMF55529P9D9Whz61LsS7a7JfSRlmm6Blq55JpX5K2hUgL.Foqf1KnNehn7S0n2dJLoIpYc1K2Ni--ciKn7iKL2i--fiKLsiKLsi--Xi-iFiK.R', 'path': '/', 'domain': '.weibo.com', 'secure': True, 'httpOnly': False, 'expiry': 1652489100, 'sameSite': 'None'}, {'name': 'ALF', 'value': '1652489100', 'path': '/', 'domain': '.weibo.com', 'secure': True, 'httpOnly': False, 'expiry': 1652489100, 'sameSite': 'None'}, {'name': 'SSOLoginState', 'value': '1620953100', 'path': '/', 'domain': '.weibo.com', 'secure': True, 'httpOnly': False, 'sameSite': 'None'}]
browser.get("https://weibo.com/337558589?is_all=1")
browser.delete_all_cookies()
for cookie in cookies:browser.add_cookie(cookie)
f = open("../users_data/dic_follow_all_6878691599.json", "r")
str = f.read()
data = json.loads(str)
i = 1
uid_len =  0
dic_all = []
need_len = 200
do_flag = 1
for item in data:print("第%d个用户" % i)# print(item)uid = item["uid"]name = item["name"]print(uid+":"+name)item_data = item["data"]follows = item_data["follows"]fans = item_data["fans"]dic_uid = {}dic_uid["uid"] = uiddic_uid["name"] = nametry:get_user_info.get_user_info(uid, dic_uid)url = "https://weibo.com/u/%s" % uidprint(url)browser.get(url)print(json.dumps(dic_uid, ensure_ascii=False, indent=4))dic_uid["mark"] = input()print(json.dumps(dic_uid, ensure_ascii=False, indent=4))dic_all.append(dic_uid)uid_len = uid_len + 1except:print("跳过用户%s" % uid)continueprint("follows:")for follow in follows:print(uid_len)print(follow)uid = follow["uid"]try:get_user_info.get_user_info(uid,follow)url = "https://weibo.com/u/%s" % uidprint(url)browser.get(url)print(json.dumps(follow, ensure_ascii=False, indent=4))follow["mark"] = input()# 终止标记过程if (follow["mark"] == "end"):do_flag = 0breakprint(json.dumps(follow, ensure_ascii=False, indent=4))dic_all.append(follow)uid_len = uid_len + 1except:print("跳过用户%s" % uid)continueif (uid_len > need_len):breakif(do_flag==0):breakif (uid_len > need_len):breakprint("fans:")for fan in fans:print(uid_len)print(fan)uid = fan["uid"]try:get_user_info.get_user_info(uid, fan)url = "https://weibo.com/u/%s" % uidprint(url)browser.get(url)print(json.dumps(fan, ensure_ascii=False, indent=4))fan["mark"] = input()# 终止标记过程if (fan["mark"] == "end"):do_flag = 0breakprint(json.dumps(fan, ensure_ascii=False, indent=4))dic_all.append(fan)uid_len = uid_len + 1except:print("跳过用户%s" % uid)if(uid_len > need_len):breakif (do_flag == 0):breaki = i +1print(uid_len)
json_f = open("../users_data/dic_marked_6878691599.json", "w")
json.dump(dic_all, json_f, indent=4)

数据展示:

微博数据处理——获取僵尸用户数据集(一)相关推荐

  1. 微博数据处理——获取广告用户数据集(三)

    任务:需要获取广告用户候选的数据集 实现思路: 1.在微博话题中筛选含广告用户较多的话题 2.使用python爬虫技术获取话题用户账号 3.获取用户行为信息,并进行手工标注 1.筛选广告话题 通过对微 ...

  2. 实现一个简易版的微博,包含 client 和 server 两部分,并实现四个基础功能:关注、取关、发微博、获取用户微博列表

    const assert = require('assert'); const question = '实现一个简易版的微博,包含 client 和 server 两部分,并实现四个基础功能:关注.取 ...

  3. android 腾讯微博授权,5腾讯微博Android客户端开发获取请求用户授权Request Token.pdf...

    腾讯微博Android客户端开发 博客:/coolszy Android Android 腾讯微博AAnnddrrooiidd客户端开发 RequestToken RequestToken --获取请 ...

  4. sina微博api:获取24小时内前20条用户的微博信息

    package weibo4j.examples; import java.util.List; import weibo4j.Status; import weibo4j.Weibo; import ...

  5. HBase项目之谷粒微博:创建命名空间,微博内容表,用户关系表,微博收件箱表,发布微博内容,添加关注用户,移除(取关)用户,获取关注的人的微博内容,HBase实战项目

    Hbase实战之谷粒微博 1 需求分析 1) 微博内容的浏览,数据库表设计 2) 用户社交体现:关注用户,取关用户 3) 拉取关注的人的微博内容 2 代码实现 2.1 代码设计总览: 1) 创建命名空 ...

  6. 用百度直达号获取新用户 让顾客直达商家服务

    直达号是什么? 直达号,商家在百度移动平台的官方服务账号.基于移动搜索.@账号.地图.个性化推荐等多种方式,让顾客随时随地直达商家服务. 直达号其实就是两个功能: √ 提供一个手机网站模板,入住商家可 ...

  7. TokenInsight 对话首席——获取增量用户 公链崛起的关键之战

    邀行业首席,谈市场现状,见趋势未来!本期<对话首席>线上活动于6月28日下午3点顺利举办. 本次<对话首席>特邀Contentos 联合创始人 Mick Tsai.Nebula ...

  8. 辛辛苦苦写了一个产品,如何获取种子用户?

    产品运营从0到1:如何获取种子用户的系列文章,分为实操篇和理论篇. 实操篇分为上下两篇,上篇主要是针对产品.人群和渠三个方面来写:下篇将会针对文案.活动.优化三个方面来写.​ 理论篇将[从0到1]的一 ...

  9. 产品运营中,我们如何获取新用户?

    为什么80%的码农都做不了架构师?>>>    本文主要和大家分享在运营中我们如何获取新用户及获取新用户有哪些注意事项,希望对广大从事产品运营的童鞋有所帮助,一起来看看吧. 随着移动 ...

最新文章

  1. 前端编码风格规范(3)—— JavaScript 规范
  2. 空间谱专题16:间距选取分析
  3. java开发属于后端吗,值得一读!
  4. IntelliJ IDEA 14.x 创建工作空间与多个Java Web项目
  5. 适合户外显示中玩耍的游戏
  6. LINUX7安装APACHE
  7. MFC中手工创建控件
  8. bpa软件视频教程,BPA是什么软件
  9. react引入本地mp4视频
  10. Axure 网站后台-能源管理系统 rp 9原模板代码下载
  11. adb安装apk python小工具
  12. Cycle3-Group1
  13. redis命令行清缓存
  14. bbedit php,BBEdit for Mac(最好用的HTML文本编辑器)
  15. Unity自动驾驶仿真
  16. Greenplum 6安装指南(CentOS 7.X)
  17. PyCharm中安装库失败 ERROR: Could not find a version that satisfies the requirement (from version None)
  18. 解决eclipse控制台不能正常输入问题的心路历程
  19. 长亮科技发布2018年报:营收首破十亿元,直面蚂蚁金服竞争压力
  20. 热潮-区块链的价值能够体现在哪些方面?

热门文章

  1. step7显示服务器,PCS 7 各服务器的功能咨询
  2. 南瑞继保、国电南自、国电南瑞
  3. 量子计算机九章概念股票,中国量子计算原型机九章问世 量子计算概念股龙头有哪些?...
  4. 【报错】sqlalchemy.exc.ArgumentError: Mapper mapped class Role→role could not assemble any primary key
  5. 【英文原著 01】-The magician's nephew
  6. celery变量共享
  7. 已知正切值求角度(反三角函数)
  8. JAVA毕设项目售楼系统(Vue+Mybatis+Maven+Mysql+sprnig+SpringMVC)
  9. DEM 提取高程点(自动批量)
  10. [Pandas] 数据迭代