首页 文章详情

骚操作!用Python爬完一周的朋友圈

Python绿色通道 | 351 2021-09-04 16:51 0 0 0
UniSMS (合一短信)

↑ 关注 + 星标 ,每天学Python新技能

后台回复【大礼包】送你Python自学大礼包


作者:小小明  

原文链接:https://blog.csdn.net/as604049322/article/details/119988788

各位童鞋,大家好,本文来自菜J学Python交流群群友小小明。😎

在《⭐UI自动化工具轻松实现微信消息收发⚡朋友圈爬取⁉️》文末给童鞋们布置了一个作业,批量朋友圈爬取,不知道大伙们是否还有印象。

看到很多小伙伴们踊跃报名参与,不禁要给你们点个赞。考虑到很多小伙伴想做却做出来,这…贴心的我这不就来给你们公布参考答案啦?

对相关基础还不了解的童鞋请参考前文:

  • 《⭐UI自动化工具轻松实现微信消息收发⚡朋友圈爬取⁉️》

  • 《️❤️对比PyWinAuto和uiautomation实现微信联系人自动采集❤️》

  • 《❤️UI自动化轻松解决微信手工群发消息的烦恼❤️》

  • 《⭐Python轻松下载整理或删除微信收藏⚡》

首先我们开始爬取朋友圈:

🌀朋友圈数据爬取⚡

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

从词云图看来,我的朋友圈都爱数据爱技术爱学习爱知识,这真是惊人的密码…

☀️PC端朋友圈爬取代码与难点🌟

保证节点在可视范围内能够被完整截图:

image-20210830010451377

节点的底部位置比显示界面更大时表示在外面,按一下向下的方向键。

解析节点的数据:

image-20210830010710474

对内容数据直接取父节点的Name,获取完整的全部文本,解析字符串即可得到昵称、发布时间等信息。

第一麻烦点是解析出点赞和评论,上述代码之所以那么复杂是因为存在只有点赞、只有评论、既有点赞又有评论,点赞和评论都没有四种情况。为了能够同时适配这四种情况,经过反复测试最终编写出上述代码。上述代码基于必定存在的评论按钮为基准点进行查找。

第二个麻烦点是想精准只截图片、视频或视频号,需要非常多的异常检测代码,每种情况变化都非常大,很难通用。最终我直接放弃,选择直接对整个节点包含昵称一起截图。对一个节点是否进行截图,取决于这个节点的文本是否包含视频或图片关键字。

注意:截屏调用节点的CaptureToImage方法即可对指定节点的范围截图保存到指定文件。

批量爬取代码:

image-20210830011925936

注意上述代码处理翻页时的异常情况,当节点不存在任何文本内容时,说明定位到了一个加载数据的节点,我们可以先按一次向上方向键回退之后,再按一下向下的方向键,即可定位到刚加载的新节点。如果回退再向下之后,名称依然是空,说明已经将朋友圈能够拉取到的数据都加载完了,可以结束程序。

⚠️说明:本文作为第一节的参考答案并不会提供可以直接复制粘贴的代码,还需要各位童鞋们自己独立完成作业。不需要写到我这么复杂,根据实际需求简化代码编写即可。

完整代码已经零碎的全部给到大家,剩下的可以根据理解,自己取敲即可。



最近有一些小伙伴,让我帮忙找一些 面试题 资料,于是我翻遍了收藏的 5T 资料后,汇总整理出来,可以说是程序员面试必备!所有资料都整理到网盘了,欢迎下载!


点击👆卡片,关注后回复【面试题】即可获取



精彩推荐
so cool ! 专属Python开发者的完美终端工具
程序员缺乏经验的 7 种表现
不到 20 人的 IT 公司该去吗?
国内互联网公司的薪酬、加班时长排名 !
外包干三年,必废!
一位数学天才的遭遇
21个令程序员泪流满面的瞬间
知乎热议“国家何时整治程序员的高薪现象”,网友:用命和头发换的钱都被人眼红

good-icon 0
favorite-icon 0
收藏
回复数量: 0
    暂无评论~~
    Ctrl+Enter