python如何实现逆向微信指数爬取(python,开发技术)

时间:2024-05-10 08:54:26 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

微信指数爬取

Appium + mitmproxy + 网易mumu安卓模拟器实现微信指数小程序爬取

通过appium实现将指令传输给手机进行相关的操作,mitmproxy运行Python脚本过滤出相关的请求,安卓模拟器取代真机使项目可以更好的落地。

1.MAC系统Appium的环境搭建

1. homebrew的安装
/usr/bin/ruby-e"$(curl-fsSLhttps://raw.githubusercontent.com/Homebrew/install/master/install)"
2. 通过brew安装node
brewinstallnode

检查node是否安装成功

node-v
3. 安装npm
sudobashsudocurl-Lhttps://npmjs.org/install.sh|sh

检查npm是否安装完成

npm-v
4. 安装android-sdk-macosx

链接: android-sdk-macosx.
下载完成因sdk缺少对应的platform-tools和build-tools 执行命令在弹出窗口进行勾选下载platform-tools和build-tools

python如何实现逆向微信指数爬取

5. 安装jdk

去官网下载:下载地址为直接下载dmg去安装

链接:JDK

6. 环境变量配置

可参考以下配置

cd ~
vi .bash_profile

JAVA_HOME=/Library/java/JavaVirtualMachines/jdk1.8.0_201.jdk/Contents/HomeCLASSPAHT=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarPATH=$JAVA_HOME/bin:$PATH:exportJAVA_HOMEexportCLASSPATHexportPATHexportANDROID_HOME=/Users/admin/Desktop/android-sdk-macosxexportPATH=$PATH:$ANDROID_HOME/toolsexportPATH=$PATH:$ANDROID_HOME/platform-tools

source .bash_profile

7. 安装appium-doctor

检查已有的环境是否都已成功

npminstall-gappium-doctor

安装完成appium-doctor 在终端输入appium-doctor命令自动检查appium所依赖的包是否有缺失

python如何实现逆向微信指数爬取

8. 安装appium命令行版
npminstall-gappium

appium -v 查看版本号

9. 安装mitmproxy

(抓包,中间人代理工具、支持SSL)

brewinstallmitmproxy

具体用法自行研究 本文只是简单的使用

10.安装网易mumu安卓模拟器

官网直接下载 有Mac版的

2.微信指数小程序爬取

1.启动appium 在终端输入
appium
2.启动网易mumu安卓模拟器并安装微信

python如何实现逆向微信指数爬取

3. 查看adb连接的设备

adb devices

首次需要先连接到模拟器 网易mumu端口号为7555 终端输入

adbconnect127.0.0.1:7555

python如何实现逆向微信指数爬取

4. 模拟器安装mitmproxy证书

python如何实现逆向微信指数爬取

python如何实现逆向微信指数爬取

将该证书打开在钥匙串中找到修改全部信任
然后在模拟器中安装 打开模拟器的设置—安全—从SD卡安装

python如何实现逆向微信指数爬取

打开内部存储空间—MuMu共享文件夹—将信任的证书拖进去即可

python如何实现逆向微信指数爬取

5.通过抓包发现微信指数小程序生成search_key的接口

python如何实现逆向微信指数爬取

python如何实现逆向微信指数爬取

编写Python脚本过滤出该请求并将该请求的响应内容(search_key)写入Mongo库

importjsonimporttimeimportsysfrompymongoimportMongoClientdefresponse(flow):client=MongoClient("xx.xx.xx.xx",27017)db=client["Spider"]url="https://search.weixin.qq.com/cgi-bin/searchweb/weapplogin"ifflow.request.url.startswith(url):text=flow.response.textdata=json.loads(text)search_key=data.get("data").get("search_key")withopen("./search_key.txt",'w+')asf:f.write(search_key)'''search_key博主是入库然后scrapy爬虫从库中读search_key进行请求具体怎么用自己按情况即可'''

使用mitmdump -s xxx.py 执行Python脚本

mitmdump -s test.py

先手动点击进入微信指数小程序触发生成search_key的接口 此时mitmproxy运行python程序按照代码对该请求进行过滤并将响应中的search_key取出写入到本地文件

python如何实现逆向微信指数爬取


到了这一步大家应该已经知道微信指数小程序的爬取方式了 在这里说下生成search_key接口的触发规则:首次进入微信指数小程序 2.三十分钟search_key失效

6.编写appium模拟点击微信进入微信指数小程序触发search_key指令代码
importtimefromappiumimportwebdriverfromselenium.webdriver.support.uiimportWebDriverWaitfromselenium.common.exceptionsimportNoSuchElementExceptionfromselenium.webdriver.common.byimportByfromselenium.webdriver.support.uiimportWebDriverWaitfromselenium.webdriver.supportimportexpected_conditionsasECfrompymongoimportMongoClientPLATFORM='Android'deviceName='emulator-5554'#app_package和app_activity可以通过adbshell进行获取app_package='com.tencent.mm'app_activity='.ui.LauncherUI'driver_server='http://127.0.0.1:4723/wd/hub'classMoments():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)deflogin(self):#允许获取xxyunxu1=self.wait.until(EC.presence_of_element_located((By.ID,'com.android.packageinstaller:id/permission_allow_button')))yunxu1.click()time.sleep(5)#允许获取xxxyunxu2=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)deftest(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)defmain(self):#首次登陆self.login()self.test()M=Moments()M.main()

郑重声明:首次登陆以后的每次操作只需要执行test方法点击到发现—小程序—微信指数即可,可以通过noReset:True设置每次不重新安装app,所以不必每次都登陆账号导致增加不必要的操作
通过uiautomatorviewer获取appium页面元素进行定位

python如何实现逆向微信指数爬取

python如何实现逆向微信指数爬取

 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:python如何实现逆向微信指数爬取的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:pycharm怎么为函数插入文档注释下一篇:

3 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18