首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >怎么样爬取朋友圈的内容?

怎么样爬取朋友圈的内容?

作者头像
伪君子
发布于 2019-11-18 06:15:34
发布于 2019-11-18 06:15:34
2.4K00
代码可运行
举报
文章被收录于专栏:伪君子的梦呓伪君子的梦呓
运行总次数:0
代码可运行

0 前言

爬取朋友圈的办法还是有很多的,今天我来介绍一下我最近发现的一个办法。

需要的是一台安卓手机,一台 Windows 电脑(ios + Mac 也可以)。

AirtestIDE 是网易出的跨平台的 UI 自动化编辑器,可以用来做自动化测试和爬虫。

这里用来爬取朋友圈的信息,下面把 AirtestIDE 简称为 IDE

官网链接:http://airtest.netease.com 官方文档:http://airtest.netease.com/docs/cn

1 前置准备

下载回来解压之后,找到 AirtestIDE.exe 双击打开,想注册登录可以注册登录,不想的话就 Skip 跳过。

Skip

进来之后是这样的,

界面

左上角的文件里面可以新建脚本,一般用户创建个 Airtest 的就行,能力高的纯 Python 也没毛病。

新建脚本

IDE 会自动创建好脚本

创建好的脚本

确保安卓手机已经打开开发者模式,且允许 USB 调试,而且已经用 USB 连接上电脑。

界面右上角的设备窗里面找到 移动设备连接,点击刷新 ADB ,设备出来之后点击 connect 进行连接。

连接手机

如果能在 AirtestIDE 里面实时看到你的安卓手机,那就是可以了。

如果出现问题,请一步一步排查,看一下是不是少操作了一步,也可以看官方文档。

http://airtest.netease.com/docs/cn/2_device_connection/1_android_phone_connection.html

到这里,已经是连接上手机了,可以进行下一步了。

2 代码准备

找到 Poco 辅助窗,然后点击一下 Stop ,在下列框中选择 Android

Poco 辅助窗选择

接着在脚本里面有一个提示,点击 Yes 就行

确认 IDE 会自动导入需要的东西。

然后在 UI 渲染树 那里能看到手机当前页面的 UI 树。

UI 渲染树

不同版本的微信可能会有所不同,我使用的微信版本是 7.0.7。这里主要讲的是思路,代码是辅助。

前面 IDE 自动生成的代码就略过,只讲一下需要写的代码。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
start_app('com.tencent.mm')  # 启动微信

poco(text="发现").click()  # 点击发现

# poco("com.tencent.mm:id/bu").offspring("com.tencent.mm:id/bv").child("android.widget.LinearLayout").child("android.widget.RelativeLayout")[2].offspring("com.tencent.mm:id/djv").click()
poco(text="朋友圈").click()  # 点击朋友圈

首先是启动微信,这里非常简单 start_app('com.tencent.mm') 就可以了,com.tencent.mm 是微信的包名,如果换一个应用就需要换包名。

poco(text="发现").click() 是找到 text 属性为 发现 的 UI,然后点击它,.click()就是点击,朋友圈那个同理。

发现

我注释掉了一句代码,那句也是点击 发现 的,但是比较长,所以注释掉,然后使用短的那一句代码。

这里必须说一下这行代码是怎么出来的。

在 Poco 辅助窗那点击下图中圈中的那个图标,Poco Inspector,然后到手机界面中移动到想要点击的那个 UI ,然后 UI 树会自动展开。

去 UI 树那双击想要点击的 UI ,代码会自动添加,然后加上 .click()

UI 树

我知道文字表述得不够清晰,所以有动图。

动图

当然,可以选择录制脚本

录制脚本

点击这个之后,去手机页面进行点击,IDE 会自动把语句生成。

录制脚本自动生成语句

所以目前是已经打开微信,点击了发现,进入了朋友圈。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
while True:
    result_obj = poco("com.tencent.mm:id/f3l")
    for result in result_obj:
        try:
            name = result.offspring("com.tencent.mm:id/bag").get_text()
            context =  result.offspring("com.tencent.mm:id/f3p").get_text()
            print(name,context)
            print()
        except:
            pass

    dev = device()  # 获取当前手机设备
    dev.minitouch.swipe_along([[817, 2170],[506, 32]])
    sleep(2.5)  # 暂停 2.5

看下图就可以知道,一条朋友圈就是在一个 name 为 com.tencent.mm:id/f3l 的FrameLayout 里面的。

一条朋友圈 poco("com.tencent.mm:id/f3l") 就是获取界面上能看到的朋友圈。

result_obj = poco("com.tencent.mm:id/f3l") 是把界面上能看到的朋友圈全部获取然后赋值到 result_obj ,待会对 result_obj 进行 for 循环,遍历出需要的内容来。

由下图可以看出,com.tencent.mm:id/bag 是 昵称/备注, com.tencent.mm:id/f3p 是文字内容。

name = result.offspring("com.tencent.mm:id/bag").get_text() 的意思就是把某一条朋友圈的昵称提取出来,赋值给 name,context 同理。

内容

因为很有可能会出现问题,所以我 try except 了一下。

dev = device() 是获取当前手机设备,因为遍历完了当前的这些就需要上滑加载更多。

dev.minitouch.swipe_along([[817, 2170],[506, 32]]) 就是上滑。[817, 2170] 和 [506, 32] 就是坐标,dev.minitouch.swipe_along([A,B])的意思就是从 A 坐标 滑动到 B 坐标。

左上角的选项那里有个设置,设置里面有个实时坐标显示,勾选了之后,鼠标移动到手机界面就能看到实时坐标。

相对坐标也可以使用勾选,按道理应该在适配上更好一点。

实时坐标显示

效果就是这样

实时坐标显示效果

把这些代码放在 while True: 里面,这样就能一直运行下去了。

3 完整代码

下面这个的代码只是使用 IDE 进行输出,不需要使用 Python 环境;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# -*- encoding=utf8 -*-
__author__ = "ASUS"

from airtest.core.api import *
from poco.drivers.android.uiautomation import AndroidUiautomationPoco
poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False)

start_app('com.tencent.mm')  # 启动微信
sleep(6.6)
poco(text="发现").click()  # 点击发现
poco(text="朋友圈").click()  # 点击朋友圈

while True:
    result_obj = poco("com.tencent.mm:id/f3l")
    for result in result_obj:
        try:
            name = result.offspring("com.tencent.mm:id/bag").get_text()
            context =  result.offspring("com.tencent.mm:id/f3p").get_text()
            print(name,context)
            print()
        except:
            pass

    dev = device()  # 获取当前手机设备
    dev.minitouch.swipe_along([[817, 2170],[506, 32]])  # 向上滑动
    sleep(2.5)  # 暂停 2.5

如果是要保存的话,那就得需要使用 Python 了。保存到 csv 文件的 python 代码就在下面。

建议是使用 IDE 来创建,这样会自动填写连接手机的代码。

"Android://127.0.0.1:5037/d918c48a" 这里 d918c48a 就是下图显示的这个,不同手机是不一样的。(如果知道 adb 的话,直接 cmd 里面 adb devices 查看)

设备

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# -*- encoding=utf8 -*-
__author__ = "ASUS"
import csv
from airtest.core.api import *
from airtest.cli.parser import cli_setup
from poco.drivers.android.uiautomation import AndroidUiautomationPoco

poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False)

if not cli_setup():
    auto_setup(__file__, logdir=True, devices=[
        "Android://127.0.0.1:5037/d918c48a",
    ])

# generate html report
# from airtest.report.report import simple_report
# simple_report(__file__, logpath=True)# script content

start_app('com.tencent.mm')  # 启动微信
sleep(6.6)
poco(text="发现").click()  # 点击发现
poco(text="朋友圈").click()  # 点击进入朋友圈

with open('pyq.csv', "w", newline="", encoding="utf-8-sig") as f:
    csv_write = csv.writer(f)
    csv_head = ["昵称", "文本内容"]
    csv_write.writerow(csv_head)

while True:
    result_obj = poco("com.tencent.mm:id/f3l")
    out = open("pyq.csv", "a+", newline="", encoding="utf-8-sig")
    csv_writer = csv.writer(out, dialect="excel")

    for result in result_obj:
        try:
            name = result.offspring("com.tencent.mm:id/bag").get_text()
            context = result.offspring("com.tencent.mm:id/f3p").get_text()
            print(name, context)
            row = [name, context]
            csv_writer.writerow(row)
            print()
        except:
            pass

    out.close()
    dev = device()  # 获取当前手机设备
    dev.minitouch.swipe_along([[817, 2170], [506, 32]])  # 向上滑动
    sleep(2.5)

4 相关说明

AirtestIDE 是可以只运行部分代码的

只运行选中代码

稍微做一下修改的话,那么就不是爬取整个朋友圈了,而是可以单独爬取一个人的朋友圈

这样爬取下来的只是昵称 + 文字,如果想爬取更多,可以试试 hook 或者 mitmproxy 抓包。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-11-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 伪君子的梦呓 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
用 Python 告诉你!最近 24 小时内朋友圈发生了什么
之前有一篇 文章 使用 Airtest 实现自动看新闻薅羊毛这一操作,其实 Airtest 功能远不止此。
小小詹同学
2019/07/12
1.2K0
用 Python 告诉你!最近 24 小时内朋友圈发生了什么
[1054]Airtest的探索使用
Airtest是网易出品的一款基于图像识别和poco控件识别的一款UI自动化测试工具。Airtest的框架是网易团队自己开发的一个图像识别框架,这个框架的祖宗就是一种新颖的图形脚本语言Sikuli。Sikuli这个框架的原理是这样的,计算机用户不需要一行行的去写代码,而是用屏幕截屏的方式,用截出来的图形摆列组合成神器的程序,这是Airtest的一部分。
周小董
2021/10/15
1.7K0
Python实现自动抢红包功能
可能有人每天都忙碌于各类微信群中,专注抢红包。那是否可以利用 Python 实现自动抢红包呢?
axiomxs
2021/11/26
2.3K0
Python实现自动抢红包功能
用 Python 在朋友圈中游遍全球
十一长假,相信大部分的朋友这会应该是在全国各地浪或者是在浪的路上,朋友圈成为你们表演的场所。
小小詹同学
2019/10/10
1K0
用 Python 在朋友圈中游遍全球
Python自动抢红包,超详细教程,再也不会错过微信红包了!
提到抢红包,就不得不提Xposed框架,它简直是个抢红包的神器,但使用Xposed框架有一个前提条件:手机需要root,对于苹果手机的话就需要越狱了。现在的手机想要root或越狱并不容易,同时这会对手机安全性带来一些风险,抢红包本身只是个娱乐活动,这样做就得不偿失了。
疯狂软件李刚
2020/06/24
4.1K1
Python自动抢红包,超详细教程,再也不会错过微信红包了!
基于AirTest+Python的ios自动化测试demo(微信朋友圈无限点赞)
AirTest相比Appuim有个好处就是可以对GUI图片进行捕捉和最新版本支持WebView(目前Appuim不支持iOS12的WebView进行Xpath抓取) AirTest环境搭建可参考以下链接: https://airtest.netease.com/docs/docs_AirtestIDE-zh_CN/1_quick_start.html
freesan44
2018/12/27
7.6K0
Airtest Project:一款免费的自动化测试工具
Airtest Project是网易出品的一款自动化解决方案,它适用于任意游戏引擎和应用的自动化测试,并且支持Android和Windows。 Airtest 是一个自动化测试框架提供了利用图像识别技术,Airtest Project不需要依赖被测对象的源码。 Airtest Project是跨平台的API,它基本和所有Android移动应用程序和Windows游戏兼容。 在2018年3月26号的Google开发者日上,Google也宣布了这款由网易开发的项目,因此很值得一试。 Airtest Project提供了一个自动化测试编辑器Airtest IDE,Airtest IDE使用了基于图像识别的UI自动化测试框架—Airtest来进行控件定位;它同时集成了POCO框架,POCO框架是基于控件识别的UI自动化框架,支持主流游戏引擎:Cocos2d-x, Unity3d,支持Android原生应用。因此可以选择是用图像识别或者基于控件定位的方式来进行控件定位。
Altumn
2019/10/21
3.5K0
Airtest Project:一款免费的自动化测试工具
聊聊 Airtest 自动化工具
很多读者看过之前的文章,发现我使用最多的是一款 Airtest 的自动化测试框架。
测试开发社区
2019/10/31
1.7K0
聊聊 Airtest 自动化工具
Python爬虫学习 爬取微信朋友圈
如果直接用 Charles 或 mitmproxy 来监听微信朋友圈的接口数据,这是无法实现爬取的,因为数据都是被加密的。而 Appium 不同,Appium 作为一个自动化测试工具可以直接模拟 App 的操作并可以获取当前所见的内容。所以只要 App 显示了内容,我们就可以用 Appium 抓取下来。
python学习教程
2020/07/02
2.1K0
使用Airtest超快速开发App爬虫
想开发网页爬虫,发现被反爬了?想对 App 抓包,发现数据被加密了?不要担心,使用 Airtest 开发 App 爬虫,只要人眼能看到,你就能抓到,最快只需要2分钟,兼容 Unity3D、Cocos2dx-*、Android 原生 App、iOS App、Windows Mobile……。
青南
2019/02/26
2.4K0
Python自动抢红包,从此再也不会错过微信红包了!
作者 | 上海小胖 来源 | Python专栏(ID:xpchuiit) 目录: 0 引言 1 环境 2 需求分析 3 前置准备 4 抢红包流程回顾 5 代码梳理 6 后记 0 引言
数据森麟
2019/09/27
2.6K1
Python自动抢红包,从此再也不会错过微信红包了!
谁偷偷删了你的微信?别慌!Python 帮你都揪出来了
不知道你有没有经历过,想联系一位很长时间没有联系的朋友,发现对方很早以前已经把你删除了,而你还一无所知。
小小詹同学
2019/08/01
1K0
谁偷偷删了你的微信?别慌!Python 帮你都揪出来了
AirtestProject是什么
AirtestProject是由网易游戏推出的UI自动化测试解决方案,主要包含3部分内容: 1.Airtest框架:跨平台的,基于图像识别的UI自动化测试框架,支持平台有Windows、Android和iOS。 2.Poco框架:基于UI控件识别的自动化测试框架,目前支持Android原生、iOS原生、Unity3D、cocos2dx、UE4和Egret等平台,也可以在其他引擎中自行接入poco-sdk来使用。 3.AirtestIDE:跨平台的UI自动化测试编辑器,内置了Airtest和Poco的相关插件功能,能够使用它快速简单地编写Airtest和Poco代码。
编程随笔
2022/09/23
7500
AirtestProject是什么
Python自动抢红包,超详细教程,再也不会错过微信红包了
提到抢红包,就不得不提Xposed框架,它简直是个抢红包的神器,但使用Xposed框架有一个前提条件:手机需要root,对于苹果手机的话就需要越狱了。现在的手机想要root或越狱并不容易,同时这会对手机安全性带来一些风险,抢红包本身只是个娱乐活动,这样做就得不偿失了。
诸葛青云
2019/06/12
2.3K0
Python自动抢红包,超详细教程,再也不会错过微信红包了
薅羊毛 | 让Python每天帮你薅一个早餐钱
以今日头条极速版为首,包含趣头条、东方头条、全名小视频在内的 App 都有看新闻、视频送金币的活动,当金币达到一定量后,就可以提现到微信、支付包。
sergiojune
2019/05/15
9750
薅羊毛 | 让Python每天帮你薅一个早餐钱
airtest测试用例_Airtest 常用方法
auto_setup(__file__,devices=[“Android://127.0.0.1:5037/SJE5T17B17”])#方法二:用connect_device()方法连接设备
全栈程序员站长
2022/11/15
1.9K0
在Airtest中如何使用无线模式控制手机
在使用Airtest超快速开发App爬虫文章的最后,我们留了一个尾巴:如何启动Airtest的无线模式,不用USB线就能控制手机?
青南
2019/03/01
3.4K0
在Airtest中如何使用无线模式控制手机
自动化篇 | 你想要的闲鱼日常操作,Python 给你实现了
前篇文章讲了如何在 iOS 端使用 Airtest 实现自动化的操作,本篇将继续带大家做 iOS 端的自动化项目。
AirPython
2020/03/23
3.8K2
自动化篇 | 你想要的闲鱼日常操作,Python 给你实现了
自动化测试中的那些误解和偏见
因为最近混了一些论坛以及群看别人的讨论。发现好多人认为自动化测试是测试人员的唯一出路。
赵云龙龙
2019/09/25
8680
这款开源测试神器,圆了我玩游戏不用动手的梦想
一天我在公司用手机看游戏直播,同事问我在玩什么游戏?我和他说在看直播,他恍然大悟:原来如此,我还纳闷你玩游戏,咋不用动手呢。。。。一语惊醒梦中人:玩游戏不用动手,怎样才能做到玩游戏不用手呢?我要去 GitHub 上找找~
HelloGitHub
2021/10/19
7890
这款开源测试神器,圆了我玩游戏不用动手的梦想
推荐阅读
相关推荐
用 Python 告诉你!最近 24 小时内朋友圈发生了什么
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验