基於python抓取微信公衆號的實驗爬蟲

Python爬取微信公衆號

工具準備
fiddler+pycharm
fiddler設置手機端代理抓包
找到一段相似代碼
在這裏插入圖片描述

這裏返回一段json數據,json解析後得到在這裏插入圖片描述
對比手機端在這裏插入圖片描述
此頁面可以拿到該公衆號所有的歷史文章鏈接,這樣一來思路就有了,我們需要去這個頁面。配合appium和mitmproxy就可以獲取到所有數據。
#-安裝mitmproxy pip install mitmproxy
#- appium需要去官網下載appium傳送門

#mitmproxy 可以配合python腳本使用不過需要函數固定格式
def response(flow):
"""抓包"""
	if 'qq.com/mp/profile_ext?action=getmsg' in flow.request.url:
		with open("gzh.txt","a+",endcode="utf-8") as f:
			f.write(flow.response.text)
#其實可以存入數據庫的,這裏沒做進一步處理,旨在提供一種思路。
#mitmproxy運行在8080端口,手機設置代理即可,cmd裏面啓動mitmdump -s 你的python腳本(就是上面這個函數)-p 可以設置端口(mitmweb類似fiddler)

下面接着就是要搞定appium你可以理解爲就是selenium。
這裏需要安裝安卓SDK[提取碼r446]傳送門
這個安裝比較繁瑣,下載完後打開sdk在這裏插入圖片描述
選擇option設置如下mirrors.neusoft.edu.cn
同時選擇這個需要全選安裝過程很慢,大概有23個包
繼續安裝就好了,安裝會比較慢。安裝完後配置環境即可,這個大家百度一下。
插入安卓手機,打開開發者模式,選擇usb調試
cmd 裏面輸入adb devices 能看到連接的當前手機

from appium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
import logging
logging.captureWarnings(True)

cap ={
  "platformName": "Android",
  "platformVersion": "7.0",#當前手機系統
  "deviceName": "79BQADRABL9DR",#cmd裏面的查看到的手機
  "appPackage": "com.tencent.mm",#微信安卓包
  "appActivity": "com.tencent.mm.ui.LauncherUI",#微信安卓包
  "noReset": True#這個不能漏掉
}
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", cap)#啓動app
#定義一個獲取當前屏幕尺寸的函數
def get_window(driver):
    x1 = driver.get_window_size()["width"]
    y1 = driver.get_window_size()["height"]
    return (x1,y1)
   

#其餘部分就不一一演示,和selenium類似,點擊到微信gzh文章列表頁面,設置好mitm代理,實現一個一直下滑的動作,即可抓取到gzh全部的文章鏈接。多線程應該也可以,目前測試其他app沒問題,微信一直有小bug,有知道原因的朋友分享下。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章