【Python爬虫实战】微信公众号爬虫:微信公众号浏览自动化

本文内容详细介绍微信公众号历史文章自动化浏览脚本的实现,配合服务端对公众号文章数据爬取来实现微信公众号文章数据的采集。服务端爬取实现见:微信公众号爬虫:服务端公众号文章数据采集

背景:在团队的学习方面需要每周收集开发方面的博客文章,汇总输出每周的技术周报。周报小组成员收集的文章大多数是来自微信公众号,公众号的内容相对网页博客内容质量还是比较高的。既然数据的来源是确定的,收集汇总的流程是确定的,那么就把这个流程自动化,把人工成本降低到0。

一、方案选取

1、数据源选取

主要是爬取的数据来源选取,网上资料看的较多是爬取搜狗微信的内容,但是第三方平台(包括新榜、清博等 )的公众号文章数据更新做不到实时,而且数据也不全,还要和各种反爬措施斗智斗勇,浪费时间精力的事情划不来。最直接的方式当然是直接爬取微信公众号历史文章里面的内容。

在前期预研主要参考的资料是知乎专栏:微信公众号内容的批量采集与应用

上面的方案是借助阿里巴巴开源的AnyProxy工具,AnyProxy作为一个中间人在微信客户端和服务器之间的交互过程中做数据截获和转发。获取到公众号文章的实际链接地址之后转发到自己的服务器进行保存,整个数据采集的自动化程度较大取决于微信客户端的自动化浏览实现。

2、自动化方案选取

如果是比较简单的安卓应用自动化操作的实现,一般直接使用AccessibilityService就行,UIAutomator也是基于AccessibilityService来实现的,但是AccessibilityService不支持WebView的操作,因为微信公众号历史文章页面是用WebView来加载的,要实现自动化必须同时支持安卓原生和WebView两个上下文环境的操作。

经过现有的几个自动化方案实现对比,最便利又具备极佳扩展性的方案就是使用Appium

  •     Appium是开源的移动端自动化测试框架;
  •     支持Native App、Hybird App、Web App;
  •     支持Android、iOS、Firefox OS;
  •     跨平台,可以在Mac,Windows以及Linux系统上;
  •     用Appium自动化测试不需要重新编译App;
  •     支持Java、python、ruby、C#、Objective C、PHP等主流语言;

更多资料参考:Android自动化测试框架

TIPS:

也可以使用阿里巴巴开源的Macaca,Macaca支持主流的移动技术平台 iOS和Android,以及两大平台的混合运行时Webview,也支持以往的桌面端浏览器。

Macaca是一套面向用户端软件的测试解决方案,提供了自动化驱动,环境配套,周边工具,集成方案,旨在解决终端上的测试、自动化、性能等方面的问题。

有兴趣可以自行研究下Macaca的自动化实现,整个实现机制和用Appium是类似的。

Macaca官网:

https://macacajs.github.io/zh/

Macaca GitHub:

https://github.com/alibaba/macaca

公众号文章爬取系统架构图

公众号文章爬取系统架构图

 

二、Appium安装配置(Mac)

Appium程序的安装,我这边不是使用brew命令安装的方式,直接从BitBucket下载Appium安装包,也可以从Github上下载。这边使用BitBucket 1.5.3版本。

Appium1.5.0之后的版本,需要在终端安装doctor,在终端输入命令:npm install -g appium-doctor,安装完毕之后,在终端输入命令:appium-doctor,查看所需的各个配置是否都已经安装配置完毕。下面是我这边在终端输出得到的结果:

info AppiumDoctor Appium Doctor v.1.4.3
 info AppiumDoctor ### Diagnostic starting ###
 info AppiumDoctor   The Node.js binary was found at: /Users/chenwenguan/.nvm/versions/node/v8.9.3/bin/node
 info AppiumDoctor   Node version is 8.9.3
 info AppiumDoctor   Xcode is installed at: /Library/Developer/CommandLineTools
 info AppiumDoctor   Xcode Command Line Tools are installed.
 info AppiumDoctor   DevToolsSecurity is enabled.
 info AppiumDoctor   The Authorization DB is set up properly.
 WARN AppiumDoctor   Carthage was NOT found!
 info AppiumDoctor   HOME is set to: /Users/chenwenguan
 WARN AppiumDoctor   ANDROID_HOME is NOT set!
 WARN AppiumDoctor   JAVA_HOME is NOT set!
 WARN AppiumDoctor   adb could not be found because ANDROID_HOME is NOT set!
 WARN AppiumDoctor   android could not be found because ANDROID_HOME is NOT set!
 WARN AppiumDoctor   emulator could not be found because ANDROID_HOME is NOT set!
 WARN AppiumDoctor   Bin directory for $JAVA_HOME is not set
 info AppiumDoctor ### Diagnostic completed, 7 fixes needed. ###
 info AppiumDoctor 
 info AppiumDoctor ### Manual Fixes Needed ###
 info AppiumDoctor The configuration cannot be automatically fixed, please do the following first:
 WARN AppiumDoctor - Please install Carthage. Visit https://github.com/Carthage/Carthage#installing-carthage for more information.
 WARN AppiumDoctor - Manually configure ANDROID_HOME.
 WARN AppiumDoctor - Manually configure JAVA_HOME.
 WARN AppiumDoctor - Manually configure ANDROID_HOME and run appium-doctor again.
 WARN AppiumDoctor - Add '$JAVA_HOME/bin' to your PATH environment
 info AppiumDoctor ###
 info AppiumDoctor 
 info AppiumDoctor Bye! Run appium-doctor again when all manual fixes have been applied!
 info AppiumDoctor  

上面打叉的都是没配置好的,在终端输入命令安装Carthage :brew install carthage  

输入命令查看JDK安装路径:/usr/libexec/java_home -V

1.8.0_60, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_60.jdk/Contents/Home

/Library/Java/JavaVirtualMachines/jdk1.8.0_60.jdk/Contents/Home 

需要把上面的路径配置到环境变量中,ANDROID_HOME就是Android SDK的安装路径。

输入命令打开配置文件: open ~/.bash_profile,在文件中添加如下内容:

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_60.jdk/Contents/Home  
export PATH=$JAVA_HOME/bin:$PATH  
export ANDROID_HOME=/Users/chenwenguan/Library/Android/sdk 

输入命令让配置立即生效:source ~/.bash_profile

更多安装配置资料可参考:Mac上搭建Appium环境过程以及遇到的问题

TIPS:

在首次使用Appium时可能会出现一个错误:

Could not detect Mac OS X Version from sw_vers output: '10.13.2 

在终端输入命令:

grep -rl "Could not detect Mac OS X Version from sw_vers output" /Applications/Appium.app/ 

得到如下结果:

/Applications/Appium.app//Contents/Resources/node_modules/appium-support/lib/system.js
/Applications/Appium.app//Contents/Resources/node_modules/appium-support/build/lib/system.js
/Applications/Appium.app//Contents/Resources/node_modules/appium/node_modules/appium-support/lib/system.js
/Applications/Appium.app//Contents/Resources/node_modules/appium/node_modules/appium-support/build/lib/system.js

打开上面四个路径下的文件,添加当前的Appium版本参数,具体内容可参考:在Mac OS 10.12 上安装配置appium

三、具体代码实现

预研资料主要参考这篇博文:Appium 微信 webview 的自动化技术

自动化实现的原理就是通过ID或者模糊匹配找到相应的控件,之后对这个控件做点击、滑动等操作。如果要对微信WebView做自动化,必须能够获取到WebView里面的对象,如果是Android原生的控件可以通过AndroidStudio里面的Android Device Monitor来查看控件的id、类名等各种属性。

1、Android原生控件属性参数值的获取

在AndroidStudio打开Monitor工具:Tools->Android->Android Device Monitor

按照下图的步骤查看控件的ID等属性,后续在代码实现中会用到。

Android Device Monitor

Android Device Monitor

2、WebView属性参数值的获取

如果是在安卓真机上,需要打开WebView的调试模式才能读取到WebView的各个属性,在微信里面可以在任意聊天窗口输入debugx5.qq.com,这是微信x5内核调试页面,在信息模块中勾选打开TBS内核Inspector调试功能。

微信X5内核调试页面

微信X5内核调试页面

之后还要在真机上安装Chrome浏览器,如果是在虚拟机上无需做此操作。

接下来在Chrome浏览器中输入:chrome://inspect ,我这边使用的是虚拟机,真机上也一样,进入到公众号历史文章页面,这边就会显示相应可检视的WebView页面,点击inspect,进入到Developer Tools页面。

chrome inspect页面

chrome inspect页面

如果进入到Developer Tools页面显示一片空白,是因为chrome inspect需要加载 https://chrome-devtools-fronten

  • 6
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
根据提供的引用内容,我们可以得知微信公众号阅读数是通过抓取文章的url链接来获取的。因此,我们可以使用Python爬虫来实现这个功能。具体步骤如下: 1. 首先需要安装requests和BeautifulSoup库,可以使用以下命令进行安装: ```shell pip install requests pip install beautifulsoup4 ``` 2. 接着,我们需要获取微信公众号文章的url链接。可以通过在微信公众号平台上手动获取,或者使用Python爬虫自动获取。 3. 获取到文章的url链接后,我们可以使用requests库发送GET请求获取文章的HTML源代码。 4. 使用BeautifulSoup库解析HTML源代码,找到包含阅读数的标签,并提取出阅读数。 5. 最后,将提取出的阅读数进行输出即可。 下面是一个示例代码,可以获取指定微信公众号最新一篇文章的阅读数: ```python import requests from bs4 import BeautifulSoup # 公众号名称 name = '公众号名称' # 公众号文章页数 page = 1 # 构造请求头 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'} # 获取指定公众号最新一篇文章的url链接 url = 'https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=' + biz + '&scene=124&uin=&key=&devicetype=Windows+10&version=62080079&lang=zh_CN&a8scene=0&fontgear=2' # 发送GET请求获取HTML源代码 response = requests.get(url, headers=headers) html = response.text # 使用BeautifulSoup解析HTML源代码 soup = BeautifulSoup(html, 'html.parser') read_num = soup.find('span', {'class': 'read_num'}).get_text() # 输出阅读数 print('最新一篇文章的阅读数为:' + read_num) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值