利用Python读取微信朋友圈的多种方法总结


Posted in Python onAugust 23, 2021

背景

由于课题需要爬取朋友圈的内容作为研究数据,稍微研究了一下。

目前爬取有四种方法,我们一一来分析一下。

法1,不适用

加某个微信号为好友,给这个微信号查看自己朋友圈的权限,然后那个微信号会把你自己朋友圈生成一个链接给你。一来这个和我需求不同,我是要爬取我好友的朋友圈,不是我自己的朋友圈,二来这个套路明显是公众号吸粉的套路,这个方法舍弃。。。

法2,已不能用

原理是在PC上操作,然后打开网页版的微信,扫码后进行操作。

但是试了一下,现在微信已经关闭网页版了,因此该方法也不能用,一小段代码放上来:

import itchat
import os
import math
from PIL import Image

# 获取数据
def download_image():
    # 扫描二维码登陆微信,即通过网页版微信登陆
    itchat.auto_login()
    # 返回一个包含用户信息字典的列表
    friends = itchat.get_friends(update=True)
    #  在当前位置创建一个用于存储头像的目录wechatImages
    base_path = 'wechatImages'
    if not os.path.exists(base_path):
        os.mkdir(base_path)

    # 获取所有好友头像
    for friend in friends:
        # 获取头像数据
        img_data = itchat.get_head_img(userName = friend['UserName'])
        #判断备注名是否为空
        if friend['RemarkName'] != '':
            img_name = friend['RemarkName']
        else :
            img_name = friend['NickName']
         #   在实际操作中如果文件名中含有*标志,会报错。则直接可以将其替换掉
        if img_name is "*":
            img_name = ""
        #通过os.path.join()函数来拼接文件名
        img_file = os.path.join(base_path, img_name + '.jpg')
        print(img_file)
        with open(img_file, 'wb') as file:
            file.write(img_data)


# 拼接头像
def join_image():
    base_path = 'headImages'
    files = os.listdir(base_path) #返回指定的文件或文件夹的名字列表
    print(len(files))
    each_size = int(math.sqrt(float(6400 * 6400) / len(files)))#计算每个粘贴图片的边长
    lines = int(6400 / each_size)#计算总共有多少行
    print(lines)
    image = Image.new('RGB', (6400, 6400))# new(mode, size, color=0) 定义一张大小为640*640大小的图片,不给出第三个参数默认为黑色
    x = 0 #定义横坐标
    y = 0 #定义纵坐标
    for file_name in files:
        img = Image.open(os.path.join(base_path, file_name)) #找到/打开图片
        img = img.resize((each_size, each_size), Image.ANTIALIAS)#实现图片同比例缩放,Image.ANTIALIAS添加滤镜效果
        image.paste(img, (x * each_size, y * each_size))#将缩放后的照片放到对应的坐标下
        x += 1
        if x == lines:#如果每行的粘贴内容够了,则换行
            x = 0
            y += 1
    image.save('jointPic.jpg')#最后将全部的照片保存下来

if __name__ == '__main__':
    download_image()
    join_image()

如果你微信还能玩网页版可以试试,上面代码只是把你朋友联系人读取出来,拼成一个大的图片。操作朋友圈代码我没试,自己百度可以找到。

法3:Appnium

没试,但是理论上可以的,是在PC上装手机的模拟器,然后装微信,然后用工具Appnium模拟操作,读取朋友圈数据。但是Appnium不是一个库,是一套软件,安装需要java环境等,还有配置,非常麻烦,因此没有上手试,可以百度,有例子。

法4:模拟操作

这个简单,但是不是完整例子,后续还要自己写,先记录一下吧。

思路很简单,就是利用PC上的微信,然后读取窗口信息,模拟手工操作,打开朋友圈窗口,然后读取显示朋友圈内容的控件,就可以看到内容。

先在电脑上打开并登录微信,没有运行就没法找到微信进程号。

import psutil# 用于获取微信电脑版的进程信息;
import pywinauto# 用于自动化控制微信电脑版
from pywinauto.application import Application

没装用pip install安装一下,很快。

然后在main函数里面写代码

PID = 0#用来保存微信的进程号

    for proc in psutil.process_iter():#循环电脑上的进程,获取进程号和名称
        try:
            pinfo = proc.as_dict(attrs=['pid', 'name'])
        except psutil.NoSuchProcess:#没有运行微信程序
            pass
        else:
            if 'WeChat.exe' == pinfo['name']:#当进程名为WeChat.exe的时候,把进程号记下来
                PID = pinfo['pid']
#进程ID用来提供给 PyWinAuto.application 以连接微信电脑版,connect是要已经运行微信才行
    app = Application(backend='uia').connect(process=PID)
    #获得微信窗口实例
    Win_wechat = app['微信']

接下来是关键一步,由于微信新版窗口的布局有更改,因此下一步是关键,如果不会变通,就会失败,先调用下面语句,以树形方式打印窗口上所有控件

Win_wechat.print_control_identifiers()#以树形方式打印窗口上所有控件

然后观察,【title=“朋友圈”, control_type=“Button”】这句话在哪个控件下面,目前这个版本是在【Pane6】下面,因此用下面代码获取朋友圈按钮

利用Python读取微信朋友圈的多种方法总结

#获取微信窗口上朋友圈按钮实例
    Button_pyq = Win_wechat['Pane6'].child_window(title="朋友圈", control_type="Button")

然后打开朋友圈窗口

#获取按钮坐标
    cords = Button_pyq.rectangle()
    # 接着控制微信电脑版,模拟鼠标点击,把朋友圈窗口打开
    pywinauto.mouse.click(button='left', coords=(cords.left + 10, cords.top + 10))

运行到这里,朋友圈窗口就打开了,接下来获取朋友圈窗口实例,然后把当前窗口内容以树形显示出来

Win_pyq = app['朋友圈']#获取朋友圈窗口实例

    Win_pyq.draw_outline(colour = 'red',thickness = 2)# 在当前定位到的窗口围画出一条边界线,方便我们看出定位到了哪个控件
    Win_pyq.dump_tree()

整体代码

import psutil# 用于获取微信电脑版的进程信息;
import pywinauto# 用于自动化控制微信电脑版
from pywinauto.application import Application

if __name__ == '__main__':
    PID = 0#用来保存微信的进程号

    for proc in psutil.process_iter():#循环电脑上的进程,获取进程号和名称
        try:
            pinfo = proc.as_dict(attrs=['pid', 'name'])
        except psutil.NoSuchProcess:#没有运行微信程序
            pass
        else:
            if 'WeChat.exe' == pinfo['name']:#当进程名为WeChat.exe的时候,把进程号记下来
                PID = pinfo['pid']

    #进程ID用来提供给 PyWinAuto.application 以连接微信电脑版,connect是要已经运行微信才行
    app = Application(backend='uia').connect(process=PID)
    #获得微信窗口实例
    Win_wechat = app['微信']
    #win.print_control_identifiers()#以树形方式打印窗口上所有控件

    #获取微信窗口上朋友圈按钮实例
    Button_pyq = Win_wechat['Pane6'].child_window(title="朋友圈", control_type="Button")
    #获取按钮坐标
    cords = Button_pyq.rectangle()
    # 接着控制微信电脑版,把朋友圈窗口打开
    pywinauto.mouse.click(button='left', coords=(cords.left + 10, cords.top + 10))

    Win_pyq = app['朋友圈']#获取朋友圈窗口实例

    Win_pyq.draw_outline(colour = 'red',thickness = 2)# 在当前定位到的窗口围画出一条边界线,方便我们看出定位到了哪个控件
    Win_pyq.dump_tree()#树形打印

后续工作及扩展

1.可以看到,目前只打印当前窗口的内容,后续要将窗口滑动,然后再次读取,另外还需要对数据进行处理,因为数据比较乱:

利用Python读取微信朋友圈的多种方法总结

2.可以借鉴模拟鼠标点击的操作,自动操作微信进行消息的发送和回复,自动聊天机器人可以了解一下。

总结

到此这篇关于利用Python读取微信朋友圈的文章就介绍到这了,更多相关Python读取微信朋友圈内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python解析模块(ConfigParser)使用方法
Dec 10 Python
Python matplotlib画图实例之绘制拥有彩条的图表
Dec 28 Python
Python3.6通过自带的urllib通过get或post方法请求url的实例
May 10 Python
python  文件的基本操作 菜中菜功能的实例代码
Jul 17 Python
Python 实现判断图片格式并转换,将转换的图像存到生成的文件夹中
Jan 13 Python
利用 PyCharm 实现本地代码和远端的实时同步功能
Mar 23 Python
pycharm下pyqt4安装及环境配置的教程
Apr 24 Python
win7上tensorflow2.2.0安装成功 引用DLL load failed时找不到指定模块 tensorflow has no attribute xxx 解决方法
May 20 Python
python编写softmax函数、交叉熵函数实例
Jun 11 Python
用pandas划分数据集实现训练集和测试集
Jul 20 Python
Python字符串及文本模式方法详解
Sep 10 Python
2021年pycharm的最新安装教程及基本使用图文详解
Apr 03 Python
教你使用一行Python代码玩遍童年的小游戏
一文搞懂Python Sklearn库使用
python库sklearn常用操作
Aug 23 #Python
Python使用psutil库对系统数据进行采集监控的方法
Aug 23 #Python
Python 中的Sympy详细使用
Aug 07 #Python
Anaconda配置各版本Pytorch的实现
Aug 07 #Python
python开发的自动化运维工具ansible详解
You might like
海河写的 Discuz论坛帖子调用js的php代码
2007/08/23 PHP
php数据库配置文件一般做法分享
2012/07/07 PHP
php实现将HTML页面转换成word并且保存的方法
2016/10/14 PHP
PHP实现十进制数字与二十六进制字母串相互转换操作示例
2018/08/10 PHP
Gird组件 Part-3:范例RSSFeed Viewer
2007/03/10 Javascript
一实用的实现table排序的Javascript类库
2007/09/12 Javascript
读jQuery之十二 删除事件核心方法
2011/07/31 Javascript
JavaScript Math.ceil() 函数使用介绍
2013/12/11 Javascript
键盘上一张下一张兼容IE/google/firefox等浏览器
2014/01/28 Javascript
js判断文本框剩余可输入字数的方法
2015/02/04 Javascript
jQuery实现的鼠标滑过弹出放大图片特效
2016/01/08 Javascript
Bootstrap框架的学习教程详解(二)
2016/10/18 Javascript
nodejs socket服务端和客户端简单通信功能
2017/09/14 NodeJs
详谈DOM简介及节点、属性、查找节点的方法
2017/11/16 Javascript
基于vue.js无缝滚动效果
2018/01/25 Javascript
JS实现的JSON数组去重算法示例
2018/04/11 Javascript
详解vue通过NGINX部署在子目录或者二级目录实践
2018/09/03 Javascript
TypeScript类型声明书写详解
2019/08/28 Javascript
vue学习之Vue-Router用法实例分析
2020/01/06 Javascript
JavaScript中数组去重的5种方法
2020/07/04 Javascript
python正则表达式修复网站文章字体不统一的解决方法
2013/02/21 Python
解决python中 f.write写入中文出错的问题
2018/10/31 Python
Python实现的登录验证系统完整案例【基于搭建的MVC框架】
2019/04/12 Python
python3+openCV 获取图片中文本区域的最小外接矩形实例
2020/06/02 Python
详解HTML5中div和section以及article的区别
2015/07/14 HTML / CSS
Lookfantastic日本官网:英国知名护肤、化妆品和头发护理购物网站
2018/04/21 全球购物
印度领先的眼镜电子商务网站:Lenskart
2019/12/16 全球购物
Wallis官网:英国女装零售商
2020/01/21 全球购物
事业单位绩效考核实施方案
2014/03/27 职场文书
排查整治工作方案
2014/06/09 职场文书
加强作风建设演讲稿
2014/10/24 职场文书
2014员工聘用协议书(最新版)
2014/11/24 职场文书
门卫岗位职责
2015/02/09 职场文书
早上好问候语大全
2015/11/10 职场文书
Python编程根据字典列表相同键的值进行合并
2021/10/05 Python
Python实现抖音热搜定时爬取功能
2022/03/16 Python