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

目录
  • 背景
  • 法1,不适用
  • 法2,已不能用
  • 法3:Appnium
  • 法4:模拟操作
  • 整体代码
  • 后续工作及扩展
  • 总结

背景

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

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

法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读取微信朋友圈内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python爬取个人微信朋友信息操作示例

    本文实例讲述了Python爬取个人微信朋友信息操作.分享给大家供大家参考,具体如下: 利用Python的itchat包爬取个人微信号的朋友信息,并将信息保存在本地文本中 思路要点: 1.利用itchat.login(),实现微信号的扫码登录 2.通过itchat.get_friends()函数获取朋友信息 代码: 本文代码只获取了几个常用的信息,更多信息可从itchat.get_friends()中取 #获取个人微信号中朋友信息 #导入itchat包 import itchat #获取个人微信号

  • python 爬取微信文章

    本人想搞个采集微信文章的网站,无奈实在从微信本生无法找到入口链接,网上翻看了大量的资料,发现大家的做法总体来说大同小异,都是以搜狗为入口.下文是笔者整理的一份python爬取微信文章的代码,有兴趣的欢迎阅读 #coding:utf-8 author = 'haoning' **#!/usr/bin/env python import time import datetime import requests** import json import sys reload(sys) sys.setd

  • Python爬虫爬取微信朋友圈

    接下来,我们将实现微信朋友圈的爬取. 如果直接用 Charles 或 mitmproxy 来监听微信朋友圈的接口数据,这是无法实现爬取的,因为数据都是被加密的.而 Appium 不同,Appium 作为一个自动化测试工具可以直接模拟 App 的操作并可以获取当前所见的内容.所以只要 App 显示了内容,我们就可以用 Appium 抓取下来. 1. 本节目标 本节我们以 Android 平台为例,实现抓取微信朋友圈的动态信息.动态信息包括好友昵称.正文.发布日期.其中发布日期还需要进行转换,如日期

  • python爬取指定微信公众号文章

    本文实例为大家分享了python爬取微信公众号文章的具体代码,供大家参考,具体内容如下 该方法是依赖于urllib2库来完成的,首先你需要安装好你的python环境,然后安装urllib2库 程序的起始方法(返回值是公众号文章列表): def openUrl(): print("启动爬虫,打开搜狗搜索微信界面") # 加载页面 url = 'http://weixin.sogou.com/weixin?type=1&s_from=input&query=要爬取的公众号名

  • python爬取微信公众号文章的方法

    最近在学习Python3网络爬虫开发实践(崔庆才 著)刚好也学习到他使用代理爬取公众号文章这里,但是照着他的代码写,出现了一些问题.在这里我用到了这本书的前面讲的一些内容进行了完善.(作者写这个代码已经是半年前的事了,但腾讯的网站在这半年前进行了更新) 下面我直接上代码: TIMEOUT = 20 from requests import Request, Session, PreparedRequest import requests from selenium import webdrive

  • python爬取微信公众号文章

    本文实例为大家分享了python爬取微信公众号文章的具体代码,供大家参考,具体内容如下 # -*- coding: utf-8 -*- import requests from bs4 import BeautifulSoup from requests.exceptions import RequestException import time import random import MySQLdb import threading import socket import math soc

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

    目录 背景 法1,不适用 法2,已不能用 法3:Appnium 法4:模拟操作 整体代码 后续工作及扩展 总结 背景 由于课题需要爬取朋友圈的内容作为研究数据,稍微研究了一下. 目前爬取有四种方法,我们一一来分析一下. 法1,不适用 加某个微信号为好友,给这个微信号查看自己朋友圈的权限,然后那个微信号会把你自己朋友圈生成一个链接给你.一来这个和我需求不同,我是要爬取我好友的朋友圈,不是我自己的朋友圈,二来这个套路明显是公众号吸粉的套路,这个方法舍弃... 法2,已不能用 原理是在PC上操作,然后

  • Python读取图片属性信息的实现方法

    本文是利用Python脚本读取图片信息,有几个说明如下: 1.没有实现错误处理 2.没有读取所有信息,大概只有 GPS 信息.图片分辨率.图片像素.设备商.拍摄设备等 3.简单修改后应该能实现暴力修改图片的 GPS 信息 4.但对于本身没有 GPS 信息的图片,实现则非常复杂,需要仔细计算每个描述符的偏移量 脚本运行后,读取结果如下 脚本读取的信息 这里和 Windows 属性查看器读到的内容完全一致 图片信息1 图片信息2 源码如下 # -*- coding:utf-8 -*- import

  • iOS版微信朋友圈识别图片位置信息 如何实现?

    iOS版微信的一项功能:当你在朋友圈发照片的时候,就可以根据照片的拍摄地点显示地理位置.消息一出,网友们便纷纷开始尝试新功能的玩法. 在微信朋友圈上传图片时,点击位置可以自动识别照片拍摄的地理位置. 过去我们发送朋友圈时,可以显示自己所在的位置信息,而现在自动读取照片拍摄位置让不少人联想到了图像识别技术.事实上,微信所做的并没有这么复杂,有业内人士告诉雷锋网新功能是基于图片位置信息(即Exif的GPS定位信息)实现的. 什么是Exif? Exif(Exchangeable Image File)

  • Android GridView仿微信朋友圈显示图片

    最近项目要求上传多图并且多图显示,而且要规则的显示,就像微信朋友圈的图片显示一样. 利用GridView再适合不过了,GridView可以动态加载图片的数量,而且还比较规律,下面说一下自己的思路: 1.获取网络图片 2.初始化gridview,自定义适配器 3.根据图片数量设置gridview的列数 4.更新适配器 下面贴上部分源码并给大家解析一下 一.首先是GridView的item <com.view.SquareLayout xmlns:android="http://schemas

  • 微信小程序生成海报分享朋友圈的实现方法

    项目需求写完有一段时间了,但是还是想回过来总结一下,一是对项目的回顾优化等,二是对坑的地方做个记录,避免以后遇到类似的问题. 需求 利用微信强大的社交能力通过小程序达到裂变的目的,拉取新用户. 生成的海报如下 需求分析 1.利用小程序官方提供的api可以直接分享转发到微信群打开小程序 2.利用小程序生成海报保存图片到相册分享到朋友圈,用户长按识别二维码关注公众号或者打开小程序来达到裂变的目的 实现方案 一.分析如何实现 相信大家应该都会有类似的迷惑,就是如何按照产品设计的那样绘制成海报,其实当时

  • 利用Python查看微信共同好友功能的实现代码

    总有思路清奇的朋友存在,想实现查看微信共同好友: 由于之前分享的代码有获取过微信好友头像,所以当时第一反应是通过itchat微信接口获取好友信息,比对两个人的好友信息列表就可以实现了.按理说这么简单的话,应该早有现成的代码了,然而并没有搜到,那正好,拿来练练手! 先放最终结果图: 思路 首先通过itchat这个微信个人号接口扫码登录个人微信网页版,获取可以识别好友身份的数据.这里是需要分别登录两人微信的,拿到两人各自的好友信息存到列表中. 这样一来,查共同好友就转化成了查两个列表中相同元素的问题

  • android实现微信朋友圈发布动态功能

    本文实例为大家分享了android仿微信朋友圈发布动态功能的具体代码,供大家参考,具体内容如下 效果图: 本文概述 用到的开源库:仿照微信的图片选择器,Luban压缩图片,glide 上面红圈部分,当用户选中图片时,当=9张时,那个加号图片就会消失! 本文主要仿照微信的发布动态功能,主要时针对微信发布动态时,选中图片后的变化状态! 整体布局 这可以看到,控制图片状态的地方就是一个recyclerview 思路 利用recyclerview的多行视图来实现! 微信上的效果是,先选中图片后才会进入这

  • python实现微信小程序的多种支付方式

    目录 原理 多支付接口代码 支付方式代码 Alipay支付 YLpay支付方式 Wxpay支付方式 Creat下订单 多支付 原理 1.利用鸭子类型.规定前台传过来支付方式.pay_methon 2.再支付方式里面实现pay(名字统一)方法 3.回调函数,在支付方式里面写notify(名字统一)统一方法,返回的data统一格式. eg: data={"statu":'success',"order_id":notity_data['order_id'],"

  • Android仿微信朋友圈全文、收起功能的实例代码

    前言 一般在社交APP中都有类似朋友圈的功能,其中发表的动态内容很长的时候不可能让它全部显示.这里就需要做一个仿微信朋友圈全文.收起功能来解决该问题.在网上看到一个例子-->http://www.jb51.net/article/105251.htm,写的很不错,但是有个bug,他这个Demo只有在条目固定的时候才正常,当增加.删除条目的时候会出现全文.收起显示混乱的问题.原因是他使用了固定的position作为key来保存当前显示的状态.这篇文章在他的基础上进行优化. 效果图 具体代码 (详细

随机推荐