作者:小小明 原文链接:https://blog.csdn.net/as604049322/article/details/119988788
各位童鞋,大家好,我是CSDN小小明代码实体😎
在《⭐UI自动化工具轻松实现微信消息收发⚡朋友圈爬取⁉️》文末给童鞋们布置了一个作业,批量朋友圈爬取,不知道大伙们是否还有映像。
看到很多小伙伴们踊跃报名参与,不禁要给你们点个赞。考虑到很多小伙伴想做却做出来,这…贴心的我这不就来给你们公布参考答案啦?
对相关基础还不了解的童鞋请参考前文:
首先我们开始爬取朋友圈:
202108290919
去外面转了一圈,再回来发现10分钟之内就爬完了一周的朋友圈:
image-20210829093115282
当然这是因为我的微信好友太少,一周总共也只发了不到1000条消息。
晚上重新爬了一下,爬到8月21号直到朋友圈的数据无法继续拉取,始终都是这个状态说明已经无法拉取再早的朋友圈数据:
image-20210829225207123
共爬到1186条朋友圈动态数据,耗时12分钟:
image-20210829225545717
打开Excel简单的美化一下格式就得到如下结果:
image-20210829220033486
筛选了有点赞和评论的数据。
同时对于每一条存在图片或视频的朋友圈,都会在本地存储一张截图:
image-20210829220836616
可以看到在这近1200条朋友圈中有725条数据触发的图片或视频关键字产生截图:
image-20210829220944000
读取数据:
import pandas as pd
df = pd.read_excel("朋友圈.xlsx")
df = df.convert_dtypes()
我的好友给谁的点赞最多呢?
t = df.groupby("昵称").agg(
点赞总人数=("点赞人数", "sum"),
评论总条数=("评论条数", "sum"),
发朋友圈条数=("序号", "count")
)
display(t.sort_values("点赞总人数", ascending=False).head(10))
原来我的好友中,大家最喜欢给这些数据分析相关的好友点赞:
image-20210829232142932
排除点只发一条朋友圈的平均点赞比例最高的依然是数据分析相关的:
image-20210829235327975
秘密1:我的朋友圈中,数据分析相关的好友的朋友最容易被点赞。
t[t.发朋友圈条数 > 10].shape[0]
一周发朋友圈超过10条的话痨有21人。
t.发朋友圈条数.value_counts()
1 88
2 53
3 29
5 19
4 17
6 11
10 6
7 6
8 5
12 4
Name: 发朋友圈条数, dtype: int64
秘密2:我的好友中发过朋友圈的好友更倾向于一周只发一条朋友圈。
image-20210829233753545
秘密3:几个培训机构的营销号发朋友圈最频率,现在就把你们删掉。
点赞数排名前7的朋友圈:
image-20210830000551622
评论数排名前7的朋友圈:
image-20210830000821464
筛选出有时间信息的朋友圈统计大家的发朋友圈时间倾向:
image-20210830003202596
秘密4:好友们最倾向在中午12点和晚上7点发朋友圈。
朋友圈内容词云图:
import jieba
import stylecloud
from IPython.display import Image
words = df.内容.apply(jieba.lcut).explode()
words = words[words.apply(len) > 1]
words = words[~words.isin(["包含", "图片", "视频", "天前", "小时", "昨天", "自己"])]
stylecloud.gen_stylecloud(text=' '.join(words), max_words=500,
collocations=False,
font_path=r'C:\Windows\Fonts\msyhbd.ttc',
icon_name='fas fa-square',
size=653,
output_name='tmp.png')
Image(filename='tmp.png')
image-20210830005044251
评论区内容词云图:
import jieba
import stylecloud
from IPython.display import Image
words = df.评论列表.dropna().apply(jieba.lcut).explode()
words = words[words.apply(len) > 1]
words = words[~words.isin(["回复", "免费", "栏目", "一个", "包含", "其他"])]
stylecloud.gen_stylecloud(text=' '.join(words), max_words=500,
collocations=False,
font_path=r'C:\Windows\Fonts\msyhbd.ttc',
icon_name='fas fa-thumbs-up',
size=653,
output_name='tmp.png')
Image(filename='tmp.png')
image-20210830005446745
从词云图看来,我的朋友圈都爱数据爱技术爱学习爱知识,这真是惊人的密码…
保证节点在可视范围内能够被完整截图:
image-20210830010451377
节点的底部位置比显示界面更大时表示在外面,按一下向下的方向键。
解析节点的数据:
image-20210830010710474
对内容数据直接取父节点的Name,获取完整的全部文本,解析字符串即可得到昵称、发布时间等信息。
第一麻烦点是解析出点赞和评论,上述代码之所以那么复杂是因为存在只有点赞、只有评论、既有点赞又有评论,点赞和评论都没有四种情况。为了能够同时适配这四种情况,经过反复测试最终编写出上述代码。上述代码基于必定存在的评论按钮为基准点进行查找。
第二个麻烦点是想精准只截图片、视频或视频号,需要非常多的异常检测代码,每种情况变化都非常大,很难通用。最终我直接放弃,选择直接对整个节点包含昵称一起截图。对一个节点是否进行截图,取决于这个节点的文本是否包含视频或图片关键字。
注意:截屏调用节点的CaptureToImage方法即可对指定节点的范围截图保存到指定文件。
批量爬取代码:
image-20210830011925936
注意上述代码处理翻页时的异常情况,当节点不存在任何文本内容时,说明定位到了一个加载数据的节点,我们可以先按一次向上方向键回退之后,再按一下向下的方向键,即可定位到刚加载的新节点。如果回退再向下之后,名称依然是空,说明已经将朋友圈能够拉取到的数据都加载完了,可以结束程序。
⚠️说明:本文作为第一节的参考答案并不会提供可以直接复制粘贴的代码,还需要各位童鞋们自己独立完成作业。不需要写到我这么复杂,根据实际需求简化代码编写即可。 完整代码已经零碎的全部给到大家,剩下的可以根据理解,自己取敲即可。
本文分享自 Python数据分析实例 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!