python逆向爬虫,

  python逆向爬虫,

  本文主要介绍python反向微信索引抓取的实现步骤。有需要的朋友可以借鉴一下,希望能有所帮助。祝大家进步很大,早日升职加薪。

  00-1010微信指数攀升1。为MAC系统1设置应用环境。安装家酿2。通过brew安装node3。正在安装npm4。正在安装android-sdk-macosx5。正在安装jdk6。配置环境变量7。安装appium-doctor8。正在安装appium命令行版本9。安装麻省理工学院。M 10。安装网易牧牧安卓模拟器2。抓取微信索引小程序1。启动appium在终端2中输入。启动网易牧牧安卓模拟器,安装微信3。检查连接到adb 4的设备。在模拟器5中安装Mitm mproxy10证书。通过包捕获找到search_key的接口。6.编写应用程序模拟。点击微信进入微信索引小程序触发search_key指令码汇总3360。

  

目录

  Appium mitmproxy网易牧牧安卓模拟器实现微信索引小程序的抓取

  通过appium将指令传到手机进行相关操作,mitmproxy运行Python脚本过滤掉相关请求,Android模拟器代替真机让项目更好的落地。

  

微信指数爬取

  

1.MAC系统Appium的环境搭建

  /usr/bin/ruby-e $(curl-fsSL https://raw . githubusercontent.com/home brew/install/master/install)

  

1. homebrew的安装

  brew安装节点

  检查节点是否安装成功。

  节点v

  

2. 通过brew安装node

  sudo bash

  sudo curl-L https://npmjs.org/install.sh sh

  检查npm安装是否完成。

  npm -v

  

3. 安装npm

  链接是3360 Android-SDK-macosx。

  下载完成。sdk缺少相应的平台工具和构建工具执行命令。检查弹出窗口以下载平台工具和构建工具

  

4. 安装android-sdk-macosx

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

  链接:JDK

  

5. 安装jdk

  请参考以下配置。

  cd ~

  不及物动词bash_profile

  JAVA _ HOME=/Library/JAVA/JavaVirtualMachines/JDK 1 . 8 . 0 _ 201 . JDK/Contents/HOME

  class paht=. $ JAVA _ HOME/lib/dt . jar : $ JAVA _ HOME/lib/tools . jar

  PATH=$ JAVA _ HOME/bin : $ PATH :

  导出JAVA_HOME

  导出类路径

  导出路径

  出口安卓

  ID_HOME=/Users/admin/Desktop/android-sdk-macosx

  export PATH=$PATH:$ANDROID_HOME/tools

  export PATH=$PATH:$ANDROID_HOME/platform-tools

  

  

source .bash_profile

  

  

  

7. 安装appium-doctor

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

  

npm install -g appium-doctor

  

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

  

  

  

8. 安装appium命令行版

  

npm install -g appium

  

  appium -v 查看版本号

  

  

9. 安装mitmproxy

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

  

brew install mitmproxy

  

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

  

  

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

  官网直接下载 有Mac版的

  

  

2.微信指数小程序爬取

  

  

1.启动appium 在终端输入

  

appium

  

  

  

2.启动网易mumu安卓模拟器并安装微信

  

  

  

3. 查看adb连接的设备

  

adb devices

  

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

  

adb connect 127.0.0.1:7555

  

  

  

4. 模拟器安装mitmproxy证书

  

  

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

  

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

  

  

  

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

  

  

  编写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失效

  

  

6.编写appium模拟点击微信进入微信指数小程序触发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页面元素进行定位

  

  

  

  

总结:

  通过appium将模拟点击的指令操控模拟器进行点击进入微信指数的小程序触发search_key接口的生成,然后通过mitmdump -s xx.py程序进行过滤出相应请求将响应中的search_key进行持久化 爬取数据的时候还是使用scrapy (直接使用模拟器爬取不是好的方法)。方案可能不是最好的但是比直接破解微信登录接口、js_code(生成search_key的必要参数) 要好很多了

  以上就是python逆向微信指数爬取实现步骤的详细内容,更多关于python逆向微信指数爬取的资料请关注盛行IT软件开发工作室其它相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: