您好,登录后才能下订单哦!
这篇文章给大家分享的是有关python如何实现逆向微信指数爬取的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
Appium + mitmproxy + 网易mumu安卓模拟器实现微信指数小程序爬取
通过appium实现将指令传输给手机进行相关的操作,mitmproxy运行Python脚本过滤出相关的请求,安卓模拟器取代真机使项目可以更好的落地。
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install node
检查node是否安装成功
node -v
sudo bash sudo curl -L https://npmjs.org/install.sh | sh
检查npm是否安装完成
npm -v
链接: android-sdk-macosx.
下载完成因sdk缺少对应的platform-tools和build-tools 执行命令在弹出窗口进行勾选下载platform-tools和build-tools
去官网下载:下载地址为直接下载dmg去安装
链接:JDK
可参考以下配置
cd ~
vi .bash_profile
JAVA_HOME=/Library/java/JavaVirtualMachines/jdk1.8.0_201.jdk/Contents/Home CLASSPAHT=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar PATH=$JAVA_HOME/bin:$PATH: export JAVA_HOME export CLASSPATH export PATH export ANDROID_HOME=/Users/admin/Desktop/android-sdk-macosx export PATH=$PATH:$ANDROID_HOME/tools export PATH=$PATH:$ANDROID_HOME/platform-tools
source .bash_profile
检查已有的环境是否都已成功
npm install -g appium-doctor
安装完成appium-doctor 在终端输入appium-doctor命令自动检查appium所依赖的包是否有缺失
npm install -g appium
appium -v 查看版本号
(抓包,中间人代理工具、支持SSL)
brew install mitmproxy
具体用法自行研究 本文只是简单的使用
官网直接下载 有Mac版的
appium
adb devices
首次需要先连接到模拟器 网易mumu端口号为7555 终端输入
adb connect 127.0.0.1:7555
将该证书打开在钥匙串中找到修改全部信任
然后在模拟器中安装 打开模拟器的设置—安全—从SD卡安装
打开内部存储空间—MuMu共享文件夹—将信任的证书拖进去即可
编写Python脚本过滤出该请求并将该请求的响应内容(search_key)写入Mongo库
import json import time import sys from pymongo import MongoClient def response(flow): client = MongoClient("xx.xx.xx.xx",27017) db = client["Spider"] url = "https://search.weixin.qq.com/cgi-bin/searchweb/weapplogin" if flow.request.url.startswith(url): text = flow.response.text data = json.loads(text) search_key = data.get("data").get("search_key") with open("./search_key.txt",'w+') as f: f.write(search_key) ''' search_key 博主是入库然后scrapy爬虫从库中读search_key进行请求 具体怎么用自己按情况即可 '''
使用mitmdump -s xxx.py 执行Python脚本
mitmdump -s test.py
先手动点击进入微信指数小程序触发生成search_key的接口 此时mitmproxy运行python程序按照代码对该请求进行过滤并将响应中的search_key取出写入到本地文件
到了这一步大家应该已经知道微信指数小程序的爬取方式了 在这里说下生成search_key接口的触发规则:首次进入微信指数小程序 2.三十分钟search_key失效
import time from appium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.common.exceptions import NoSuchElementException from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from pymongo import MongoClient PLATFORM='Android' deviceName='emulator-5554' # app_package和app_activity可以通过adb shell进行获取 app_package='com.tencent.mm' app_activity='.ui.LauncherUI' driver_server='http://127.0.0.1:4723/wd/hub' class Moments(): def __init__(self): self.desired_caps={ 'platformName':PLATFORM, 'deviceName':deviceName, 'appPackage':app_package, 'appActivity':app_activity, 'noReset': "True", } self.driver=webdriver.Remote(driver_server,self.desired_caps) self.wait=WebDriverWait(self.driver,300) def login(self): # 允许获取xx yunxu1 = self.wait.until(EC.presence_of_element_located((By.ID,'com.android.packageinstaller:id/permission_allow_button'))) yunxu1.click() time.sleep(5) # 允许获取xxx yunxu2 = self.wait.until(EC.presence_of_element_located((By.ID,'com.android.packageinstaller:id/permission_allow_button'))) yunxu2.click() time.sleep(5) # 登陆按钮 login = self.wait.until(EC.presence_of_element_located((By.ID,'com.tencent.mm:id/d75'))) login.click() time.sleep(3) # 手机号 phone = self.wait.until(EC.presence_of_element_located((By.ID,'com.tencent.mm:id/hz'))) phone.send_keys("xxxxxx") time.sleep(3) # 下一步 nextButton = self.wait.until(EC.presence_of_element_located((By.ID,'com.tencent.mm:id/alr'))) nextButton.click() time.sleep(2) # 密码 passButton = self.wait.until(EC.presence_of_element_located((By.ID,"com.tencent.mm:id/hz"))) passButton.send_keys("xxxxx") time.sleep(2) # 登陆 login2 = self.wait.until(EC.presence_of_element_located((By.ID,'com.tencent.mm:id/alr'))) login2.click() time.sleep(6) # 不允许获取通讯录 notButton = self.wait.until(EC.presence_of_element_located((By.ID,"com.tencent.mm:id/an2"))) notButton.click() time.sleep(5) def test(self): ''' 登陆之后 依次点击发现 小程序 微信指数 触发接口 ''' time.sleep(10) self.driver.tap([(428,1214),(471,1251)],100) time.sleep(5) # 发现页小程序的坐标 self.driver.tap([(85,787),(148,816)],100) time.sleep(5) self.driver.tap([(114,237),(206,269)],100) time.sleep(20) self.driver.tap([(644,42),(708,85)],100) def main(self): # 首次登陆 self.login() self.test() M=Moments() M.main()
郑重声明:首次登陆以后的每次操作只需要执行test方法点击到发现—小程序—微信指数即可,可以通过noReset:True设置每次不重新安装app,所以不必每次都登陆账号导致增加不必要的操作
通过uiautomatorviewer获取appium页面元素进行定位
感谢各位的阅读!关于“python如何实现逆向微信指数爬取”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。