未进行可,严禁转载

文章目录

  • 背景
  • 法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)#  在当前位置创建一个用于存储头像的目录wechatImagesbase_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 += 1if x == lines:#如果每行的粘贴内容够了,则换行x = 0y += 1image.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:#没有运行微信程序passelse: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 Applicationif __name__ == '__main__':PID = 0#用来保存微信的进程号for proc in psutil.process_iter():#循环电脑上的进程,获取进程号和名称try:pinfo = proc.as_dict(attrs=['pid', 'name'])except psutil.NoSuchProcess:#没有运行微信程序passelse: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读取微信朋友圈相关推荐

  1. Python + AI 微信朋友圈的故事

    本文主要记录用Python3调itchat来爬取好友信息,并且制作好友性别比例图,好友位置分析,好友所在城市TOP20 和好友个性签名词云等.涉及如下模块:     itchat :一个开源的微信个人 ...

  2. python爬虫微信朋友圈怎么发文字_如何利用Python网络爬虫抓取微信朋友圈的动态(上)...

    今天小编给大家分享一下如何利用Python网络爬虫抓取微信朋友圈的动态信息,实际上如果单独的去爬取朋友圈的话,难度会非常大,因为微信没有提供向网易云音乐这样的API接口,所以很容易找不到门.不过不要慌 ...

  3. python爬微信朋友圈关键词_爬取朋友圈,Get年度关键词

    人生苦短,我用Python && C#. 1.引言 最近初学Python,写爬虫上瘾.爬了豆瓣练手,又爬了公司的论坛生成词云分析年度关键词.最近琢磨着2017又仅剩两月了,我的年度关键 ...

  4. python爬微信朋友圈怎么发文字_一件有趣的事:用Python爬了自己的微信朋友圈

    原标题:一件有趣的事:用Python爬了自己的微信朋友圈 最近几天干啥都不来劲,昨晚偶然了解到Python里的itchat包,它已经完成了wechat的个人账号API接口,使爬取个人微信信息更加方便. ...

  5. 使用Python获取微信朋友圈的内容

    无意中发现个超好用的框架,python居然也能读到朋友圈的内容 方法如下 # Github地址:https://github.com/mrsanshui/WeChatPYAPI # 码云地址:http ...

  6. python实现微信朋友圈点赞_使用vue做类似于微信点赞的效果?

    遇到这么个问题: 如图: 多条朋友圈,当我点赞时,当前的这条朋友圈给我追加用户,点赞数量也相应地增加,再次点击点赞时就是取消点赞也就相应地删除这个点赞用户名字,点赞数量也相应减少. 这个该怎么做呀?? ...

  7. python发微信朋友圈_python实现微信每日一句自动发送给喜欢的人

    本文实例为大家分享了python实现微信每日一句自动发送的具体代码,供大家参考,具体内容如下 参考了一篇博客:教你使用python实现微信每天给女朋友说晚安 代码: # -*- coding: utf ...

  8. 用Python玩弄微信朋友圈,一键制作好友图片墙酷炸朋友圈(附源码)

    上午发了张我微信近 2000 位好友的头像拼图,让大伙儿看能不能快速找到自己的头像,没想到反响很强烈,引得阵阵惊呼与膜拜,没有料到. 有没有犯密集恐惧症?这并不震撼,如果你有 5000 位好友的话,做 ...

  9. python制作微信朋友圈九分图

    话不多说直接上效果 借助于python的一个强大的图形处理库 PIL(python Image Library) 编码思路: 1.创建大的底部正方形底板 2.将原图按比例绘制上去 3.将新图按照从左到 ...

  10. Python数据 分析微信朋友圈

    个人兴趣爱好,通过python对微信朋友圈进行了分析,主要对微信好友进行提取,对好友地区分布,签名等进行可视化 需要安装包如下: pip3 install itchat pip3 install pa ...

最新文章

  1. 算法------对称二叉树
  2. 【错误记录】Android 编译时技术报错 ( 注解处理器 process 方法多次调用问题 )
  3. 2020 年软件开发趋势预测,Java 将占主导,Python 将要吞噬世界
  4. python的序列包括字符串列表和什么_Python基础:03序列:字符串、列表和元组
  5. Firefox无法启动,提示Profile is yet in use by another Firefox
  6. Linux搭建深度学习环境使用指南
  7. 【Java从入门到头秃专栏 4】语法篇(三) :字符串 数组
  8. 配置webpack.config.js遇到的一些问题
  9. Windows Mobile 6.1发布了
  10. graph面板x轴模式包括哪些_Grafana panel之Graph
  11. webbuilder mysql tomcat 安装心得
  12. 那些月入5000的人,凭什么比你更早买房买车?
  13. mysql实现axure协同工作_AxureUX CRM及协同办公APP高保真原型模板(带移动端实用元件库)...
  14. 进程调度算法的模拟实现
  15. Emscripten 单词_人教版英语七年级下册单词、课文及音频汇总
  16. Android 高级面试
  17. git 从当前分支copy出新分支
  18. 《Cocos Creator游戏实战》旋转循环页视图实现
  19. 爱站权重批量查询 查询爱站的seo权重
  20. 每天一个小技巧【5】·数位板笔刷压感设置

热门文章

  1. 齿轮的正负变位设计要点
  2. eclipse黑色炫酷主题设置1
  3. 小区选择与重选的方法理解
  4. html前端论文参考文献,web前端论文参考文献
  5. 【合集】高等数学随堂笔记-苏德矿老师-部分内容汇总
  6. 象棋人机对战中所用的极大极小值-alpha-beta剪枝算法介绍
  7. 格雷希尔GripSeal螺纹接头的规格型号
  8. 移动App测试中Android测试和IOS测试有啥区别
  9. 利用LiveReload插件实现vscode和谷歌浏览器实时刷新
  10. 普元EOS中如何往Session的UserObject中设置自定义属性