python爬虫24 | 搞事情了,用 Appium 爬取你的微信朋友圈。

昨天小帅b看到一些事情不顺眼

 

有人偷换概念

 

忍不住就写了一篇反讽 996 的

 

看不下去了,我支持996,年轻人就该996!

 

没想到有些人看不懂

 

这就算了

 

还来骂我

 

早些时候关注我的小伙伴应该知道我第一时间就发过反对 996 的文章

 

去他妈的996!

python之父就是牛逼

 

哎~

 

不过也好

 

洗掉一些无脑粉丝

 

“你个假粉丝,小帅b不是蔡徐坤”

 

python爬虫24 | 搞事情了,用 Appium 爬取你的微信朋友圈。

 

好了

 

进入正题

 

上次

 

小帅b跟你说了如何安装 Appium 的相关环境

 

以及让它自动打开了手机上的微信App

 

python爬虫23 | 手机,这次要让你上来自己动了。这就是 Appium+Python 的牛x之处

 

相信你已经跃跃欲试

 

想要来爬取一些手机上的 APP 数据了

 

那么这次

 

小帅b就带你爬取微信朋友圈的数据

 

接下来就是

 

学习 python 的正确姿势

 

python爬虫24 | 搞事情了,用 Appium 爬取你的微信朋友圈。

 

友情提醒

本篇需要你先安装好 Appium 相关环境才可以哟,如果你还没安装的话快点出门左转,安装完之后再来这里玩耍。

 

ok

 

首先我们要知道微信这个 apk 的包名和启动页的 Activity

 

将你的 Android 鸡连接到电脑

 

在终端输入 adb devices 确保你已经将你的鸡连接到电脑

 

python爬虫24 | 搞事情了,用 Appium 爬取你的微信朋友圈。

 

如果像上面这样出现设备名称就说明你连接上你的电脑了

 

如果你插进电脑之后还没发现有任何设备名称显示

 

那就记得打开 USB 调试,多拔插几次,总会连上的,这是过来人经验

 

python爬虫24 | 搞事情了,用 Appium 爬取你的微信朋友圈。

接着

 

在你的手机里面打开微信

 

然后打开你的终端输入

 

adb shell

 

然后输入

 

dumpsys activity | grep mFocusedActivity

 

python爬虫24 | 搞事情了,用 Appium 爬取你的微信朋友圈。

 

 

这时候我们就获取到微信的包名和启动页面的名称了

 

我们还要知道我们的手机是什么版本的

 

输入以下命令获取

 

adb shell getprop ro.build.version.release

 

那么现在我们就知道了这些必要的信息了

 

   desired_caps = {}   desired_caps[‘platformName‘] = ‘Android‘   desired_caps[‘platformVersion‘] = ‘5.1‘   desired_caps[‘deviceName‘] = ‘88CKBM622PAM‘   desired_caps[‘appPackage‘] = ‘com.tencent.mm‘   desired_caps[‘appActivity‘] = ‘.ui.LauncherUI‘

 

python爬虫24 | 搞事情了,用 Appium 爬取你的微信朋友圈。

 

接下来

 

主要思路就是

 

自动开启微信

模拟登录微信

找到小帅b的朋友圈

把朋友圈的数据抓下来

 

想要模拟登录

 

我们就需要获取到微信的登录按钮这个元素

 

如何获取呢?

 

在你安装好的 sdkmanager 的 tool 目录下

 

有一个叫做 uiautomatorviewer 的工具

 

windows用户直接双击打开

 

ubuntu的话可以进入相应的目录

用命令 ./uiautomatorviewer 行打开

 

~/android/tools/bin$ ./uiautomatorviewer 

 

打开之后是这个鸟样

 

python爬虫24 | 搞事情了,用 Appium 爬取你的微信朋友圈。

 

我们点击菜单栏的第二个图标按钮

 

python爬虫24 | 搞事情了,用 Appium 爬取你的微信朋友圈。

 

这时候你就会发现

 

手机的屏幕被抓过来了

 

用鼠标点一下登录按钮你会看到

 

相应的资源信息都被定位到了

 

python爬虫24 | 搞事情了,用 Appium 爬取你的微信朋友圈。

 

那么要让它自动点击登录按钮就简单了

 

# 获取到登录按钮后点击 login_btn = self.wait.until(EC.element_to_be_clickable((By.ID, "com.tencent.mm:id/e4g"))) login_btn.click()

 

点击登录之后页面是这样的

 

python爬虫24 | 搞事情了,用 Appium 爬取你的微信朋友圈。

 

我们要切换到用邮箱登录

 

还是老样子

 

我们获取到按钮,然后让它点击

 

 # 获取使用微信号登录按钮  change_login_btn = self.wait.until(EC.element_to_be_clickable((By.ID, "com.tencent.mm:id/cou")))  change_login_btn.click()

 

那么接下来就输入账号密码了

 

python爬虫24 | 搞事情了,用 Appium 爬取你的微信朋友圈。

 

 

获取到账号和密码的 EditText 和 登录按钮

 

然后自动输入账号密码

 

最后点一下登录

 

 # 获取输入账号元素并输入 account = self.wait.until(EC.presence_of_element_located((By.XPATH, ‘//*[@resource-id="com.tencent.mm:id/cos"]/android.widget.EditText‘))) account.send_keys("你的微信账号") # 获取密码元素并输入 password = self.wait.until(EC.presence_of_element_located((By.XPATH,  ‘//*[@resource-id="com.tencent.mm:id/cot"]/android.widget.EditText‘))) password.send_keys("你的微信密码") # 登录 login = self.wait.until(EC.element_to_be_clickable((By.ID, "com.tencent.mm:id/cov"))) login.click()

 

登录之后会弹出一个界面

 

你愿意把你的通讯录授权给我吗?

 

呵呵

 

no!

 

python爬虫24 | 搞事情了,用 Appium 爬取你的微信朋友圈。

 

# 点击去掉通讯录提示框no_btn = self.wait.until(EC.element_to_be_clickable((By.ID, "com.tencent.mm:id/az9")))no_btn.click()

 

这样

 

我们就成功登入微信了

 

python爬虫24 | 搞事情了,用 Appium 爬取你的微信朋友圈。

接下来找到小帅b的微信

 

python爬虫24 | 搞事情了,用 Appium 爬取你的微信朋友圈。

 

需要点击上方的搜索按钮

 

 # 获取到搜索按钮后点击 search_btn = self.wait.until(EC.element_to_be_clickable((By.ID, "com.tencent.mm:id/iq"))) search_btn.click()

 

这时候会出现输入框

 

python爬虫24 | 搞事情了,用 Appium 爬取你的微信朋友圈。

 

搜索小帅b本b

 

# 获取搜索框并输入search_input = self.wait.until(EC.presence_of_element_located((By.ID, "com.tencent.mm:id/kh")))search_input.send_keys("wistbean")

 

这时候会出现一个 item

 

python爬虫24 | 搞事情了,用 Appium 爬取你的微信朋友圈。

 

没错

 

点击头像进去

 

# 点击头像进入 xiaoshuaib_btn = self.wait.until(EC.element_to_be_clickable((By.ID, "com.tencent.mm:id/py"))) xiaoshuaib_btn.click()

 

接下来几步都是一个道理

 

主要是进入小帅b的朋友圈

 

# 点击右上角...进入menu_btn = self.wait.until(EC.element_to_be_clickable((By.ID, "com.tencent.mm:id/jy")))menu_btn.click()# 再点击头像icon_btn = self.wait.until(EC.element_to_be_clickable((By.ID, "com.tencent.mm:id/e0c")))icon_btn.click()# 点击朋友圈moment_btn = self.wait.until(EC.element_to_be_clickable((By.ID, "com.tencent.mm:id/d86")))moment_btn.click()

 

就这样点进去

 

python爬虫24 | 搞事情了,用 Appium 爬取你的微信朋友圈。

 

进入朋友圈之后

 

我们来分析一下

 

python爬虫24 | 搞事情了,用 Appium 爬取你的微信朋友圈。

 

 

可以看到小帅b的朋友圈是这样的

 

我们需要滑动获取到更多内容

 

可以使用 Appium 的 swipe 方法

 

再来

 

我们需要循环获取到数据

 

python爬虫24 | 搞事情了,用 Appium 爬取你的微信朋友圈。

 

可以看到每条朋友圈都被封装到 ListView 这个容器里面

 

所以我们要从这里面获取所有数据

 

然后再进行遍历

 

那么每一个具体的条目呢?

 

python爬虫24 | 搞事情了,用 Appium 爬取你的微信朋友圈。

 

可以看到

 

数据被放在了 LinearLayout 的具体容器里面了

 

所以我们可以根据 id 获取相应的内容

 

 # 获取 FrameLayout items = self.wait.until(EC.presence_of_all_elements_located((By.ID, ‘com.tencent.mm:id/eew‘))) # 滑动 self.driver.swipe(self.start_x, self.start_y, self.end_x, self.end_y, 2000) #遍历获取 for item in items:     moment_text = item.find_element_by_id(‘com.tencent.mm:id/kt‘).text     day_text = item.find_element_by_id(‘com.tencent.mm:id/eke‘).text     month_text = item.find_element_by_id(‘com.tencent.mm:id/ekf‘).text     print(‘抓取到小帅b朋友圈数据: %s‘ % moment_text)     print(‘抓取到小帅b发布时间: %s月%s‘ % (month_text, day_text))

 

 

至此

 

我们的代码写完了

 

来运行一下吧

 

首先打开 Appium

 

[Appium] Welcome to Appium v1.12.1[Appium] Appium REST http interface listener started on 0.0.0.0:4723

 

接着运行爬取朋友圈的代码

 

截取部分结果

 

微信启动...登录成功...搜索小帅b...进入朋友圈...抓取到小帅b朋友圈数据: 那天马云说:我从来没碰过钱,我对钱没兴趣。
最近马云说:能 996 是一种福气,我每天都 1212。
果然,有钱爸爸说话就是好听。抓取到小帅b发布时间: 4月月12抓取到小帅b朋友圈数据: 有本事双击我头像抓取到小帅b发布时间: 4月月10抓取到小帅b朋友圈数据: 刚点了外卖,小哥有点超时才送到。我倒不觉得有什么,可是小哥将餐物双手递给我后接下来的动作让我惊讶到了:
他对我深深地鞠了一躬……??抓取到小帅b发布时间: 4月月01抓取到小帅b朋友圈数据: 有人抱怨现在的互联网产品太霸道,微信不能打开淘宝链接,头条不能放微信二维码,百度搜不到知乎高质量问题……
但其实出门看一下,好像也没有哪家麦当劳可以直接开在肯德基里面卖全家桶的。抓取到小帅b发布时间: 3月月29抓取到小帅b朋友圈数据: 有人抱怨现在的互联网产品太霸道,微信不能打开淘宝链接,头条不能放微信二维码,百度搜不到知乎高质量问题……
但其实出门看一下,好像也没有哪家麦当劳可以直接开在肯德基里面卖全家桶的。抓取到小帅b发布时间: 3月月28抓取到小帅b朋友圈数据: 这两天听到最多的一句话就是:帅b老仙,法力无边。
整的我差点以为自己有法力了……抓取到小帅b发布时间: 3月月25抓取到小帅b朋友圈数据: 夸夸群,写几个微信机器人放群里,搞点夸奖人的语句数据库,根据用户的话检索一下,然后返回相应的夸奖语句。
嗯,然后把我自己放进群里,享受一顿夸,觉得不爽还可以继续改那些夸我的话。抓取到小帅b发布时间: 3月月22抓取到小帅b朋友圈数据: 突然发现我好久好久没有讲潮汕话了...抓取到小帅b发布时间: 3月月20抓取到小帅b朋友圈数据: 夸夸群,写几个微信机器人放群里,搞点夸奖人的语句数据库,根据用户的话检索一下,然后返回相应的夸奖语句。
嗯,然后把我自己放进群里,享受一顿夸,觉得不爽还可以继续改那些夸我的话。抓取到小帅b发布时间: 3月月15抓取到小帅b朋友圈数据: 根据监管部门规定以及相关投诉
这条朋友圈无法观看,但你可以点赞抓取到小帅b发布时间: 3月月10抓取到小帅b朋友圈数据: 之前想的是再好的产品也抵不过有强大 IP 支撑的破产品。
但现在想想,IP 也是产品的一部分。抓取到小帅b发布时间: 3月月05抓取到小帅b朋友圈数据: 之前想的是再好的产品也抵不过有强大 IP 支撑的破产品。
但现在想想,IP 也是产品的一部分。抓取到小帅b发布时间: 3月月04抓取到小帅b朋友圈数据: 9102了,还是有那么多 zf 的网站又丑又难用。抓取到小帅b发布时间: 3月月01...

 

 

ok

 

拿到数据还可以进一步存储

 

小帅b就不说了

 

因为从下一篇开始

 

小帅b会说说爬取下来的数据存储相关的

 

这一篇

 

主要让你知道如何爬取 app 的数据

 

如果你想去抓包爬取朋友圈的数据

 

是很难的

 

微信做了限制

 

所以用 Appium 相对来说就简单好多啦

 

本篇涉及到的源代码一样放在了公众号

 

在后台发送 「朋友圈」获取

 

下次见

 

peace

 

python爬虫24 | 搞事情了,用 Appium 爬取你的微信朋友圈。

帅b老仙

法力无边

 

python爬虫24 | 搞事情了,用 Appium 爬取你的微信朋友圈。

 

 

相关文章

1、对于b站这样的滑动验证码,不好意思,照样自动识别

2、手机,这次要让你上来自己动了。这就是 Appium+Python 的牛x之处

3、上来,自己动 !这就是 selenium 的牛逼之处

 

 

 

右下角

发功+1

python爬虫24 | 搞事情了,用 Appium 爬取你的微信朋友圈。

上一篇:小程序上传文件至云存储


下一篇:写入自定义 ASP.NET Core 中间件