IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Python读取微信朋友圈 -> 正文阅读

[Python知识库]Python读取微信朋友圈

未进行可,严禁转载

背景

由于课题需要爬取朋友圈的内容作为研究数据,稍微研究了一下。
目前爬取有四种方法,我们一一来分析一下。

法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】下面,因此用下面代码获取朋友圈按钮
在这里插入图片描述

#获取微信窗口上朋友圈按钮实例
    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.可以看到,目前只打印当前窗口的内容,后续要将窗口滑动,然后再次读取,另外还需要对数据进行处理,因为数据比较乱:
在这里插入图片描述
2.可以借鉴模拟鼠标点击的操作,自动操作微信进行消息的发送和回复,自动聊天机器人可以了解一下。

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-08-23 16:38:21  更:2021-08-23 16:38:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 10:15:11-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码