爬虫分析某微博账号转发影响因子

19 篇文章 0 订阅
订阅专栏
5 篇文章 0 订阅
订阅专栏

任务

受一个很有想法的同学的启发,通过挖掘一个微博的转发,查看对其的转发量最有影响的因素与节点。
当然这个是需要很大规模的数据支持才能够显著说明问题,在解决这个问题的过程中,逐渐演变为对某个博主的数据分析。

过程

角度:某博主对转发微博影响

在 上一个文章的成功基础上,基本能够获取微博的任何内容。

数据结构

做为第一个测试的项目,首先对少量有价值的信息进行分析,这里选取:

博文数据博主数据
转发转发量评论量点赞量发文时间内容概要粉丝量个人信息(默认已知,不记录)
原文id昵称个人信息(可选)*

*个人信息: 有性别、所在地概要信息及性别、所在地、星座、大学、公司等完整信息

数据采集

根据文章与书籍得知,微博移动端页面采用异步加载技术。

使用浏览器的检查(inspect,F12)功能,切换为移动端,再刷新页面(F5),获取到需要的内容链接Url。

示意

由此,可获取界面上的数据及微博的具体信息。
信息为json格式,通过构造字典囊括关键字段。

为获取一个微博博主的所有微博信息,需要构造囊括这些信息的URL。通过观察可知,格式统一为:

https://m.weibo.cn/api/container/getIndex?containerid=230413博主的id号_-_WEIBO_SECOND_PROFILE_WEIBO&page_type=03&page=页码数

因此构造出一系列的URL

###某微博账户的全部微博内容
def contentURL(id,pages):
    i=0
    urls=[]
    for page in pages:
        if page is not 0:
            urls+=['https://m.weibo.cn/api/container/getIndex?containerid=230413'+str(id)+'_-_WEIBO_SECOND_PROFILE_WEIBO&page_type=03&page='+str(page)]  
    return urls

为灵活调整需要获取的数据信息,特将储存与建立数据列表规范化,通过在开始构建词典,将需要的数据设置为True:

#获取博文信息范围、排列
blogRangeDict={
'visible': False,#{type: 0, list_id: 0}

#发文时间    
'created_at': True,#"20分钟前"
    
'id': False,#"4466073829119710"
'idstr': False,#"4466073829119710"
'mid': False,#"4466073829119710"
'can_edit': False,#false
'show_additional_indication': False,#0

#博文内容   
'text': True,#"【情况通报】2019年12月31日,武汉市卫健部门发布关于肺炎疫情的情况通报。
    
'textLength': False,#452
'source': False,#"360安全浏览器"
'favorited': False,#false
'pic_types': False,#""
'is_paid': False,#false
'mblog_vip_type': False,#0
'user': False,#{id: 2418542712, screen_name: "平安武汉",…}

#转发、评论、点赞数  
'reposts_count': True,#1035
'comments_count': True,#1886
'attitudes_count': True,#7508
    
'pending_approval_count': False,#0
'isLongText': False,#true
'reward_exhibition_type':False,# 0
'hide_flag': False,#0
'mblogtype': False,#0
'more_info_type': False,#0
'cardid': False,#"star_11247_common"
'content_auth': False,#0
'pic_num': False,#0
    
#若无相关信息,则显示:
'infoNoExist':'未知'
}

可以将获取到的字典格式的json数据筛选出之前定义的需要的数据,并以列表形式传递,便于之后储存在csv格式的文件中。

#将字典类型的信息格式传递为需要的信息列表
#infoDict 字典类型(json)的信息
#rangeDict 定义的需要的数据(例:blogRangeDict、userRangeDict等)
def getInfoList(infoDict,rangeDict):
    infoList=[]
    for item in rangeDict:
        if rangeDict.get(item) is True:
            content=infoDict.get(item)            
            infoList.append(content)      
        else:
            infoList.append(rangeDict['infoNoExist'])
    return infoList

同理,构造csv格式文件的标题

#构造csv文件标题
#rangeDict 定义的需要的数据(例:blogRangeDict、userRangeDict等)
#prefix 此标题的前缀,防止同名
def getInfoTitle(rangeDict,prefix):
    titleList=[]
    for item in rangeDict:
        if(rangeDict.get(item) is True):
            titleList.append(prefix+item)
    return (titleList)

通过已构造出的一系列URL爬取数据并写入csv文件:
*注:传入的csvWriter为writer格式,例如:

fp = open(fileAddress,'w+',newline='',encoding='utf-16')
writer=csv.writer(fp)
reRatio(urls,writer)
……

若爬取至终点(页面无内容),则返回False,程序终止;否则返回True,便于程序构造下一批URL与再次爬取。

###在已有的一系列urls中进行操作
###筛选出微博转发内容进行操作
def reRatio(urls,csvWriter):
    notEnd= True
    #定义标题
    retweetBlogTitle=getInfoTitle(blogRangeDict,'转发')#转发博文信息标题
    retweetUserTitle=getInfoTitle(userRangeDict,'转发')#转发博主信息标题
    
    originBlogTitle=getInfoTitle(blogRangeDict,'原文')#原文博文信息标题
    originUserTitle=getInfoTitle(userRangeDict,'原文')#原文博主信息标题
    infoTitle=getInfoTitle(infoRangeDict,'')#原文博主个人主页信息标题
    
    #写表格的标题
    if getConcreteInfoList is True:       
        csvWriter.writerow(retweetBlogTitle+retweetUserTitle+originBlogTitle+originUserTitle+infoTitle)        
    else:
        csvWriter.writerow(retweetBlogTitle+retweetUserTitle+originBlogTitle+originUserTitle)
        
    for url in urls:        
        
        response = requests.get(url,headers=headers)
        resjson = json.loads(response.text)    
        cards=resjson['data']['cards']      
        
        #print(cards)
        
        #结束最后
        if(len(cards)==1):
            notEnd=False
            break
        #遍历一个页面的所有微博    
        for card in cards:
            try:
                #转发博文与博主信息
                retweetBlogInfoDict=card['mblog']   
                retweetUserInfoDict=retweetBlogInfoDict['user']              
                    
                #筛选出转发的微博
                try:                
                    originBlogInfoDict=retweetBlogInfoDict['retweeted_status']
                    
                    
                    if originBlogInfoDict is not None:                        
                        
                        #转发博文原文与博主信息
                        originUserInfoDict=originBlogInfoDict['user']
                        retweetUserID=retweetUserInfoDict['id']
                        originUserID=originUserInfoDict['id']
                        ###不是转发自己的微博,则选中进行处理
                        if(retweetUserID!=originUserID):
                            infoList=[]                            
                            
                            #转发博文数据
                            retweetBlogInfoList=getInfoList(retweetBlogInfoDict,blogRangeDict)               
                            infoList+=retweetBlogInfoList                            
                            #转发博主数据
                            ##默认已知
                            retweetUserInfoList=getInfoList(retweetUserInfoDict,userRangeDict)               
                            infoList+=retweetUserInfoList  
                            #原文博文数据
                            originBlogInfoList=getInfoList(originBlogInfoDict,blogRangeDict)               
                            infoList+=originBlogInfoList
                            #原文博主数据
                            originUserInfoList=getInfoList(originUserInfoDict,userRangeDict)               
                            infoList+=originUserInfoList                                           
                            
                            #originUserID为原文账号的ID                            
                            #可在此对id进行信息采集                               
                            
                            if getConcreteInfoList is True:
                                infoDict=getInfo(isLogin,originUserID)
                                otherInfoList=getInfoList(infoDict,infoRangeDict)      
                                infoList+=otherInfoList                          
                            #print(infoList)
                            #保存数据至csv
                            csvWriter.writerow(infoList)                       
                            
                        #不断获取该博主对的影响力
                        #break
                except:
                    pass
            except:
                pass
        #延时,防止反爬
        time.sleep(3)
        
    return notEnd

主干程序:通过提供博主的id号,进行完整的数据采集操作,并保存至本地的csv文件中。

def downloadData(id):
    tweeter=getExatInfo('昵称',2,int(id))
    batch=0
    while(1):

        fileAddr=addrFile(tweeter,'batch'+str(batch))
        if os.path.exists(fileAddr) is True:
            print(tweeter+'已存在,跳过采集')                
        else:
            print('文件将写入:'+fileAddr)
            fp = open(fileAddr,'w+',newline='',encoding='utf-16')
            writer=csv.writer(fp)
            if reRatio(contentURL(id,range(20*batch,20*(batch+1))),writer) is False:
                fp.close()
                break

            fp.close()
            print('第'+str(batch)+'批数据已记录完毕')
        batch+=1

运行示意如下:
运行示意

获取到的数据如图:
数据文件
共4批

数据处理

处理数据关键在于可视化,图像能够说明一切:
在读取完爬取到的数据后,将重点的数字通过图像表现出来。

博主转发原文的数据

在这里插入图片描述

博主转发博文的数据

微博抑制流量造假,将转发与评论数的上限设定为100万,故出现如下图像,另:表情符无法显示。
在这里插入图片描述

博主原文与转发数据对比

数据对比

各数据量与粉丝量之比

这里是想观测何种数据与粉丝量的相关程度更强,并大致评估数据造假的程度。
不难看出,转发量的相关程度最弱。
在此,也说明一下为什么选则某博主转发的博文进行研究。考虑到一个微博在转发之后再被转发的价值性有所下降。
同时,一条信息的传播能力也和博主的影响力相关,代表影响力的即使粉丝数量。
故一个人的转发数量在高度徘徊很大说明数据造假之嫌:有多少粉丝愿意为了粉丝的热度无脑转发一些无用信息?
在这里插入图片描述

典型博主展示

以下选取不同类别博主对比:

吴京

数据量较少
吴京数据

vista看天下

看到过的相关程度最好的一组数据
在这里插入图片描述

华中科技大学

在这里插入图片描述

转发量的情况可以分析为一条极端微博的影响,具体观测该微博情况:来自烈士纪念日的一条微博。
在这里插入图片描述
除去几个极端情况,转发量并没有更好的变化,但评论量和点赞量的拟合效果显著提高了。
在这里插入图片描述

科比

科比数据
作为国外体育明星,他的微博数据热度在最初达到高峰,代表国人对其的欢迎,之后偶有波澜。
在这里插入图片描述

2020 年最新微博内容及评论爬虫
12-22
微博爬虫综述 今天手把手教大家如何写成一份微博爬虫的代码,可以自己爬取微博的热门话题或评论,方便做相关的数据分析和可视化。 该项目的 Github 地址是 https://github.com/Python3Spiders/WeiboSuperSpider ,请不要利用该爬虫项目获得的数据作任何违法用途。 微博爬虫主要有两个导向,一个是微博内容的爬虫,其目的字段包括微博文本、发布者、转发/评论/点赞数等,另一个是微博评论的爬虫,其目的字段主要是评论文本和评论者。 微博爬虫的目的网站主要有四个,pc 站weibo.com、weibo.cn 以及对应的 m(mobile) 站 m.weibo.c
2021 新版微博转发爬虫发布
月小水长
07-17 1110
今日发布的微博转发爬虫,是之前从没有发布过的微博爬虫,一样是付费内容,主要实现概述如下: 根据指定的微博 mid 爬取该微博转发信息。 爬取该微博转发微博转发信息;甚至转发转发转发,可以无限地套娃… 爬取并保存的,字段信息如下: 字段名 解释 mid 纯数字形式的微博唯一标识,可与字母+数字形式 id 互转 publish_time 发布时间 user_name 微博作者名 user_link 微博作者链接 content 内容 weibo_link 微博
爬虫】爬取微博数据作运营情况分析案例解析(weiboSpider爬虫+python数据分析
最新发布
qq_39172059的博客
03-10 1057
微博数据爬取python工具有很多。本次为我们选用:weiboSpider唯一的难度是cookie的获取,严格按照说明文档进行即可。配置好config.json文件运行main.py即可爬取数据。
微博用户特征分析和核心用户
02-29
关于微博用户特征分析和核心用户挖掘的一份ppt,包含行为关联分析、社区划分 、普通用户挖掘、微博名人挖掘等四部分的简介。
Python之数据分析2023最全学习路径都在这了.......
2201_75735270的博客
02-17 435
Python之数据分析2023最全学习路径都在这了.......
利用pyecharts绘制微博粉丝地区分布图
cascara的博客
02-04 1799
爬虫爬取的数据包括个人的地区,故可视化能够将其在地图上显示出来。
Python数据分析系列之——王一博微博转发分析
Echo_littleshan的博客
12-15 2997
文章目录 首先说明一下本人不是王一博粉丝,也不讨厌王一博,只是最近在学习python数据分析,就随便找了一条微博转发量来分析一下,只是刚好抽中了王一博哈~ 但是有些时候的确令人疑惑,为什么wyb随随便便发一条微博(不管是推广还是自拍)都可以有一百万加的转发量,这有点强哈~~~所以今天我们就选一条微博爬取其转发用户数据分析一下。 本人本着客观的态度分析,如果不正确的地方欢迎批评指正。 ...
微博数据爬虫——获取转发用户列表 selenium实现(零)
weixin_43906500的博客
03-25 1416
1.环境配置 python 3.7 geckodriver 0.29.0 火狐浏览器 86.0.1 2.相关理论 selenium 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。selenium 是一套完整的web应用程序测试系统,包含了测试的录制(selenium IDE),编写及运行(Seleni
新浪微博爬虫分享(一天可抓取 1300 万条数据)
谁说大象不能跳舞
02-04 2068
爬虫功能: 转载请注明出处,谢谢!(原文链接:http://blog.csdn.net/bone_ace/article/details/50903178)
分享下微博爬虫的代码
真新镇的涅法雷姆
01-30 2029
一、说在前面 微博的反爬做的还是挺好的,登陆过程中有跳转、加密、验证码等玩意儿夹杂在一起,模拟登陆的难度比较大。所以偷懒用了cookie登录的方式,访问wap站来减小难度。 思路是从一个大V开始抓取他的粉丝列表,从粉丝列表中筛选粉丝数较大的号继续爬取他的粉丝列表,获取了大量的微博UID后,拼接出他的个人资料页和所发微博页,从中爬取需要的数据。 二、上代码 2.1 获取微博UID impo
新浪微博爬虫,用python爬取新浪微博数据
02-07
本程序可以连续爬取一个或多个新浪微博用户(如胡歌、迪丽热巴、郭碧婷)的数据,并将结果信息写入文件或数据库。写入信息几乎包括用户微博的所有数据,包括用户信息和...转发微博Live Photo中的视频(免cookie版特有)
利用爬虫爬取微博用户微博,对所发微博文本进行可视化、文本分析
07-08
依据目标用户微博UID抓取一定时期内目标用户所发(原创和转发)微博(包含图片、视频),保存到本地 依据所抓取目标用户微博内容、目标用户头像制作目标用户微博关键词词云 依据目标用户微博个人资料,制作目标用户个人...
python爬虫之新浪微博爬虫.rar
01-12
python爬虫之新浪微博爬虫
Python网络爬虫之爬取微博热搜
09-19
主要介绍了Python网络爬虫之爬取微博热搜的相关知识,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
Python 爬虫微博资源
08-12
资源描述: 这个资源是一个基于Python编写的微博爬虫,旨在帮助用户抓取微博平台上的用户数据、帖子内容、评论等信息,以便进行社交媒体分析和洞察 内容概要: 该爬虫使用Python的网络爬虫技术,可以从微博平台上...
sql server 导入汉字乱码问题解决
cascara的博客
01-25 8947
通过查询语句从csv文件导入数据,英文(*ASCII码内*)可显示成功,但中文或报错无法导入,或导入后显示为乱码,系统中没有以*UNICODE*格式另存为文件。
网络爬虫获取地铁人流量数据
cascara的博客
01-25 6950
任务 学院的C语言课程设计选题为地铁模拟系统,除了实现购票和充值,题目还要求实现车辆调度功能,原本没有想到好的实现形式一直搁置,验收关头发现必要性。 经学长点拨,将其所做的公交车的调度方式进行移植。只需绘制发车时间与抵达终点站时间的线性图即可体现调度功能,并加入真实数据处理更具逼真性。 已有 学长传给的公交车运行数据(excel表格)## [x] 1.用c语言读入数据 计划任务 ...
四元数旋转公式推导
cascara的博客
02-28 5320
四元数旋转公式f(p)=q p q^-1的推导
利用pyecharts绘制新浪微博传播图(文末附完整代码地址)
cascara的博客
02-03 4749
利用pyecharts绘图库绘制某条微博转发传播图像
python爬虫微博数据分析
01-12
对于Python爬虫微博数据分析,可以使用基于Python编写的微博爬虫工具来抓取微博平台上的用户数据、帖子内容、评论等信息,然后使用数据分析技术对这些数据进行处理和分析。 以下是一个简单的示例代码,展示了如何使用Python爬虫和数据分析库来进行微博数据分析: ```python import requests from bs4 import BeautifulSoup import pandas as pd # 定义爬取微博数据的函数 def crawl_weibo_data(): # 发送请求获取微博页面的HTML源码 url = 'https://weibo.com/' response = requests.get(url) html = response.text # 使用BeautifulSoup解析HTML源码 soup = BeautifulSoup(html, 'html.parser') # 提取微博数据 weibo_list = [] for item in soup.find_all('div', class_='weibo-item'): weibo = {} weibo['content'] = item.find('p', class_='weibo-content').text weibo['user'] = item.find('span', class_='weibo-user').text weibo_list.append(weibo) # 将微博数据转换为DataFrame格式 df = pd.DataFrame(weibo_list) return df # 调用函数进行微博数据爬取和分析 weibo_data = crawl_weibo_data() print(weibo_data.head()) # 进行更多的数据分析操作,例如统计用户数量、分析帖子内容等 # ... ``` 这段代码使用了`requests`库发送HTTP请求,使用`BeautifulSoup`库解析HTML源码,并使用`pandas`库将微博数据转换为DataFrame格式,方便进行数据分析

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • ROS安装过程遇到的问题及解决方法 21090
  • matlab匹配滤波器的仿真 12224
  • sql server 导入汉字乱码问题解决 8947
  • 网络爬虫获取地铁人流量数据 6936
  • 极坐标形式的复数计算器 6816

分类专栏

  • 数据库 4篇
  • SQL 10篇
  • SLAM 7篇
  • ROS 2篇
  • Ubuntu 4篇
  • python 5篇
  • 微博爬虫 3篇
  • 数学模型 2篇
  • 课程 2篇
  • C++ 15篇
  • 数据结构 2篇
  • 实践项目 19篇
  • C# 3篇
  • HTML 3篇
  • C课设 3篇
  • 基础知识 4篇
  • 记录 3篇

最新评论

  • 利用pyecharts绘制新浪微博传播图(文末附完整代码地址)

    hello2lin: 博主,想问问如果要在节点上添加该用户转发微博时发的文本,应该怎么操作呀?表情包

  • 数据库求属性闭包和函数最小依赖集算法实现(附代码地址)

    ⁢387: 你这只能处理一个属性是单个字符的简单情况,如果属性是单词完全没办法处理,太简单了

  • 利用pyecharts绘制新浪微博传播图(文末附完整代码地址)

    shirotaka: 博主,现在用你git的代码采集不到数据是因为微博有什么变动吗

  • 四元数旋转公式推导

    GWZZJARVIS: 博主逆时针旋转,这个没问题,旋转一个θ, 但是后边应该是u x v而不是v x u,要不然就是顺时针旋转了 博主改一下

  • 网络爬虫获取地铁人流量数据

    gg1789j: 用正则表达式提取那段运行有问题啊,

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • SLAM学习-应用齐次坐标实现矩形平移
  • SLAM学习——C++新特性
  • SLAM学习——eigen库实现四元数与旋转矩阵的转换
2020年36篇
2019年25篇

目录

目录

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

深圳SEO优化公司常德网站推广工具价格鹤壁网站排名优化报价泰安营销网站价格常德至尊标王价格山南网站定制公司盐城网站排名优化哪家好山南外贸网站设计价格肇庆网站设计价格哈密模板网站建设公司海东网站优化排名推荐迪庆建站价格林芝建网站哪家好杭州网站推广系统公司西安网站开发昆明seo优化多少钱庆阳网络推广芜湖营销型网站建设价格梅州网站制作设计哪家好宁波网站推广价格金昌关键词按天扣费推荐大庆网页设计推荐横岗营销网站报价福州如何制作网站价格宝鸡关键词排名包年推广价格运城网站建设设计哪家好濮阳模板推广推荐龙华设计公司网站推荐南昌百度竞价哪家好新乡百姓网标王推广哪家好西宁SEO按天扣费歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化