python數據分析朋友圈信息(朋友圈統計)

本文目錄一覽:

python怎麼爬取某個人的微信朋友圈的信息

主要思路

從UI獲取文本信息是最為簡單的方法,於是應該優先逆向UI代碼部分。

逆向微信apk

首先解包微信apk,用dex2jar反編譯classes.dex,然後用JD-GUI查看jar源碼。當然,能看到的源碼都是經過高度混淆的。但是,繼承自安卓重要組件(如Activity、Service等)的類名無法被混淆,於是還是能從中看到點東西。

首先定位到微信APP package。我們知道這個是 com.tencent.mm。

在 com.tencent.mm

中,我們找到一個 ui

包,有點意思。

展開 com.tencent.mm.ui

,發現多個未被混淆的類,其中發現 MMBaseActivity直接繼承自 Activity

, MMFragmentActivity

繼承自 ActionBarActivity

, MMActivity

繼承自 MMFragmentActivity

,並且 MMActivity

是微信中大多數Activity的父類:

public class MMFragmentActivity

extends ActionBarActivity

implements SwipeBackLayout.a, b.a {

}

public abstract class MMActivity

extends MMFragmentActivity {

}

public class MMBaseActivity

extends Activity {

}

現在需要找出朋友圈的Activity,為此要用Xposed hook MMActivity。

創建一個Xposed模塊

參考 [TUTORIAL]Xposed module devlopment,創建一個Xposed項目。

簡單Xposed模塊的基本思想是:hook某個APP中的某個方法,從而達到讀寫數據的目的。

小編嘗試hook com.tencent.mm.ui.MMActivity.setContentView這個方法,並列印出這個Activity下的全部TextView內容。那麼首先需要遍歷這個Activity下的所有TextView,遍歷ViewGroup的方法參考了SO的以下代碼:

private void getAllTextViews(final View v) {if (v instanceof ViewGroup) {

ViewGroup vg = (ViewGroup) v;

for (int i = 0; i vg.getChildCount(); i++) {View child = vg.getChildAt(i);

getAllTextViews(child);

}

} else if (v instanceof TextView ) {

dealWithTextView((TextView)v); //dealWithTextView(TextView tv)方法:列印TextView中的顯示文本}

}

Hook MMActivity.setContentView

的關鍵代碼如下:

findAndHookMethod(“com.tencent.mm.ui.MMActivity”, lpparam.classLoader, “setContentView”, View.class, new XC_MethodHook() {…

});

在findAndHookMethod方法中,第一個參數為完整類名,第三個參數為需要hook的方法名,其後若干個參數分別對應該方法的各形參類型。在這裡, Activity.setContentView(View view)方法只有一個類型為 View

的形參,因此傳入一個 View.class

現在,期望的結果是運行時可以從Log中讀取到每個Activity中的所有的TextView的顯示內容。

但是,因為View中的數據並不一定在 setContentView()時就載入完畢,因此小編的實驗結果是,log中啥都沒有。

意外的收穫

當切換到朋友圈頁面時,Xposed模塊報了一個異常,異常源從 com.tencent.mm.plugin.sns.ui.SnsTimeLineUI這個類捕捉到。從類名上看,這個很有可能是朋友圈首頁的UI類。展開這個類,發現更多有趣的東西:

這個類下有個子類 a

(被混淆過的類名),該子類下有個名為 gyO的 ListView

類的實例。我們知道, ListView

是顯示列表類的UI組件,有可能就是用來展示朋友圈的列表。

順藤摸瓜

那麼,我們先要獲得一個 SnsTimeLineUI.a.gyO的實例。但是在這之前,要先獲得一個 com.tencent.mm.plugin.sns.ui.SnsTimeLineUI.a的實例。繼續搜索,發現 com.tencent.mm.plugin.sns.ui.SnsTimeLineUI有一個名為 gLZ

的 SnsTimeLineUI.a

實例,那麼我們先取得這個實例。

經過測試, com.tencent.mm.plugin.sns.ui.SnsTimeLineUI.a(boolean, boolean, String, boolean)這個方法在每次初始化微信界面的時候都會被調用。因此我們將hook這個方法,並從中取得 gLZ。

findAndHookMethod(“com.tencent.mm.plugin.sns.ui.SnsTimeLineUI”, lpparam.classLoader, “a”, boolean.class, boolean.class, String.class, boolean.class, new XC_MethodHook() {@Override

protected void afterHookedMethod(MethodHookParam param) throws Throwable {XposedBridge.log(“Hooked. “);

Object currentObject = param.thisObject;

for (Field field : currentObject.getClass().getDeclaredFields()) { //遍歷類成員field.setAccessible(true);

Object value = field.get(currentObject);

if (field.getName().equals(“gLZ”)) {

XposedBridge.log(“Child A found.”);

childA = value;

//這裡獲得了gLZ

}

}

}

});

現在取得了 SnsTimeLineUI.a

的一個實例 gLZ

,需要取得這個類下的 ListView

類型的 gyO

屬性。

private void dealWithA() throws Throwable{if (childA == null) {

return;

}

for (Field field : childA.getClass().getDeclaredFields()) { //遍歷屬性field.setAccessible(true);

Object value = field.get(childA);

if (field.getName().equals(“gyO”)) { //取得了gyOViewGroup vg = (ListView)value;

for (int i = 0; i vg.getChildCount(); i++) { //遍歷這個ListView的每一個子View…

View child = vg.getChildAt(i);

getAllTextViews(child); //這裡調用上文的getAllTextViews()方法,每一個子View里的所有TextView的文本…

}

}

}

}

現在已經可以將朋友圈頁面中的全部文字信息列印出來了。我們需要根據TextView的子類名判斷這些文字是朋友圈內容、好友昵稱、點贊或評論等。

private void dealWithTextView(TextView v) {String className = v.getClass().getName();String text = ((TextView)v).getText().toString().trim().replaceAll(“\n”, ” “);if (!v.isShown())

return;

if (text.equals(“”))

return;

if (className.equals(“com.tencent.mm.plugin.sns.ui.AsyncTextView”)) {//好友昵稱

}

else if (className.equals(“com.tencent.mm.plugin.sns.ui.SnsTextView”)) {//朋友圈文字內容

}

else if (className.equals(“com.tencent.mm.plugin.sns.ui.MaskTextView”)) {if (!text.contains(“:”)) {

//點贊

} else {

//評論

}

}

}

自此,我們已經從微信APP里取得了朋友圈數據。當然,這部分抓取代碼需要定時執行。因為從 ListView中抓到的數據只有當前顯示在屏幕上的可見部分,為此需要每隔很短一段時間再次執行,讓用戶在下滑載入的過程中抓取更多數據。

剩下的就是數據分類處理和格式化輸出到文件,受本文篇幅所限不再贅述,詳細實現可參考作者GitHub上的源碼。

python爬取微信好朋友圈怎麼實現

有一個微信網頁版.模擬登陸是可以登陸上去的.但是看不了朋友圈.只能通過手機的方式進行爬取了.

python數據分析在朋友圈很火,應該如何學習?

如果有一定的基礎的話可以自學,如果是零基礎的話可以去專業的學校學習。

xposed + python 怎麼爬取微信朋友圈的數據

有JAVA的,你參考一下

主要思路

從UI獲取文本信息是最為簡單的方法,於是應該優先逆向UI代碼部分。

逆向微信apk

首先解包微信apk,用dex2jar反編譯classes.dex,然後用JD-GUI查看jar源碼。當然,能看到的源碼都是經過高度混淆的。但是,繼承自安卓重要組件(如Activity、Service等)的類名無法被混淆,於是還是能從中看到點東西。

首先定位到微信APP package。我們知道這個是 com.tencent.mm

在 com.tencent.mm

中,我們找到一個 ui

包,有點意思。

展開 com.tencent.mm.ui

,發現多個未被混淆的類,其中發現 MMBaseActivity

直接繼承自 Activity

, MMFragmentActivity

繼承自 ActionBarActivity

, MMActivity

繼承自 MMFragmentActivity

,並且 MMActivity

是微信中大多數Activity的父類:

public class MMFragmentActivity

extends ActionBarActivity

implements SwipeBackLayout.a, b.a {

}

public abstract class MMActivity

extends MMFragmentActivity {

}

public class MMBaseActivity

extends Activity {

}

現在需要找出朋友圈的Activity,為此要用Xposed hook MMActivity

創建一個Xposed模塊

參考 [TUTORIAL]Xposed module devlopment

,創建一個Xposed項目。

簡單Xposed模塊的基本思想是:hook某個APP中的某個方法,從而達到讀寫數據的目的。

小編嘗試hook com.tencent.mm.ui.MMActivity.setContentView

這個方法,並列印出這個Activity下的全部TextView內容。那麼首先需要遍歷這個Activity下的所有TextView,遍歷ViewGroup的方法參考了SO的以下代碼:

private void getAllTextViews(final View v) {

if (v instanceof ViewGroup) {

ViewGroup vg = (ViewGroup) v;

for (int i = 0; i vg.getChildCount(); i++) {

View child = vg.getChildAt(i);

getAllTextViews(child);

}

} else if (v instanceof TextView ) {

dealWithTextView((TextView)v); //dealWithTextView(TextView tv)方法:列印TextView中的顯示文本

}

}

Hook MMActivity.setContentView

的關鍵代碼如下:

findAndHookMethod(“com.tencent.mm.ui.MMActivity”, lpparam.classLoader, “setContentView”, View.class, new XC_MethodHook() {

});

在findAndHookMethod方法中,第一個參數為完整類名,第三個參數為需要hook的方法名,其後若干個參數分別對應該方法的各形參類型。在這裡, Activity.setContentView(View view)

方法只有一個類型為 View

的形參,因此傳入一個 View.class

現在,期望的結果是運行時可以從Log中讀取到每個Activity中的所有的TextView的顯示內容。

但是,因為View中的數據並不一定在 setContentView()

時就載入完畢,因此小編的實驗結果是,log中啥都沒有。

意外的收穫

當切換到朋友圈頁面時,Xposed模塊報了一個異常,異常源從 com.tencent.mm.plugin.sns.ui.SnsTimeLineUI

這個類捕捉到。從類名上看,這個很有可能是朋友圈首頁的UI類。展開這個類,發現更多有趣的東西:

這個類下有個子類 a

(被混淆過的類名),該子類下有個名為 gyO

的 ListView

類的實例。我們知道, ListView

是顯示列表類的UI組件,有可能就是用來展示朋友圈的列表。

順藤摸瓜

那麼,我們先要獲得一個 SnsTimeLineUI.a.gyO

的實例。但是在這之前,要先獲得一個 com.tencent.mm.plugin.sns.ui.SnsTimeLineUI.a

的實例。繼續搜索,發現 com.tencent.mm.plugin.sns.ui.SnsTimeLineUI

有一個名為 gLZ

的 SnsTimeLineUI.a

實例,那麼我們先取得這個實例。

經過測試, com.tencent.mm.plugin.sns.ui.SnsTimeLineUI.a(boolean, boolean, String, boolean)

這個方法在每次初始化微信界面的時候都會被調用。因此我們將hook這個方法,並從中取得 gLZ

findAndHookMethod(“com.tencent.mm.plugin.sns.ui.SnsTimeLineUI”, lpparam.classLoader, “a”, boolean.class, boolean.class, String.class, boolean.class, new XC_MethodHook() {

@Override

protected void afterHookedMethod(MethodHookParam param) throws Throwable {

XposedBridge.log(“Hooked. “);

Object currentObject = param.thisObject;

for (Field field : currentObject.getClass().getDeclaredFields()) { //遍歷類成員

field.setAccessible(true);

Object value = field.get(currentObject);

if (field.getName().equals(“gLZ”)) {

XposedBridge.log(“Child A found.”);

childA = value;

//這裡獲得了gLZ

}

}

}

});

現在取得了 SnsTimeLineUI.a

的一個實例 gLZ

,需要取得這個類下的 ListView

類型的 gyO

屬性。

private void dealWithA() throws Throwable{

if (childA == null) {

return;

}

for (Field field : childA.getClass().getDeclaredFields()) { //遍歷屬性

field.setAccessible(true);

Object value = field.get(childA);

if (field.getName().equals(“gyO”)) { //取得了gyO

ViewGroup vg = (ListView)value;

for (int i = 0; i vg.getChildCount(); i++) { //遍歷這個ListView的每一個子View

View child = vg.getChildAt(i);

getAllTextViews(child); //這裡調用上文的getAllTextViews()方法,每一個子View里的所有TextView的文本

}

}

}

}

現在已經可以將朋友圈頁面中的全部文字信息列印出來了。我們需要根據TextView的子類名判斷這些文字是朋友圈內容、好友昵稱、點贊或評論等。

private void dealWithTextView(TextView v) {

String className = v.getClass().getName();

String text = ((TextView)v).getText().toString().trim().replaceAll(“\n”, ” “);

if (!v.isShown())

return;

if (text.equals(“”))

return;

if (className.equals(“com.tencent.mm.plugin.sns.ui.AsyncTextView”)) {

//好友昵稱

}

else if (className.equals(“com.tencent.mm.plugin.sns.ui.SnsTextView”)) {

//朋友圈文字內容

}

else if (className.equals(“com.tencent.mm.plugin.sns.ui.MaskTextView”)) {

if (!text.contains(“:”)) {

//點贊

} else {

//評論

}

}

}

自此,我們已經從微信APP里取得了朋友圈數據。當然,這部分抓取代碼需要定時執行。因為從 ListView

中抓到的數據只有當前顯示在屏幕上的可見部分,為此需要每隔很短一段時間再次執行,讓用戶在下滑載入的過程中抓取更多數據。

剩下的就是數據分類處理和格式化輸出到文件,受本文篇幅所限不再贅述,詳細實現可參考作者GitHub上的源碼。

python怎麼獲取某個人的微信朋友圈的信息?

1、Python(KK 英語發音:/’paɪθɑn/, DJ 英語發音:/ˈpaiθən/)是一種面向對象、直譯式計算機程序設計語言,由Guido van Rossum於1989年底發明。第一個公開發行版發行於1991年。Python語法簡捷而清晰,具有豐富和強大的類庫。

2、它常被昵稱為膠水語言,它能夠很輕鬆的把用其他語言製作的各種模塊(尤其是C/C++)輕鬆地聯結在一起。常見的一種應用情形是,使用python快速生成程序的原型(有時甚至是程序的最終界面),然後對其中有特別要求的部分,用更合適的語言改寫。比如3D遊戲中的圖形渲染模塊,速度要求非常高,就可以用C++重寫。

3、從UI獲取文本信息是最為簡單的方法,於是應該優先逆向UI代碼部分。 逆向微信apk 首先解包微信apk,用dex2jar反編譯classes.dex,然後用JD-GUI查看jar源碼。當然,能看到的源碼都是經過高度混淆的。但是,繼承自安卓重要組件(如Activity、Service等)的類名無法被混淆,於是還是能從中看到點東西。首先定位到微信APP packagecom.tencent.mm。在      com.tencent.mm中,我們找到一個  ui包,有點意思。展開 com.tencent.mm.ui,發現多個未被混淆的類,其中發現  MMBaseActivity直接繼承自  Activity, MMFragmentActivity繼承自  ActionBarActivity, MMActivity 繼承自MMFragmentActivity,並且  MMActivity是微信中大多數Activity的父類。

4、現在需要找出朋友圈的Activity,為此要用Xposed hook MMActivity。創建一個Xposed模塊,參考[TUTORIAL]Xposed module devlopment,創建一個Xposed項目。簡單Xposed模塊的基本思想是:hook某個APP中的某個方法,從而達到讀寫數據的目的。

5、在findAndHookMethod方法中,第一個參數為完整類名,第三個參數為需要hook的方法名,其後若干個參數分別對應該方法的各形參類型。在這裡,Activity.setContentView(View view)方法只有一個類型為Vie的形參,因此傳入一個View.class。

6、結果是運行時可以從Log中讀取到每個Activity中的所有的TextView的顯示內容。但是,因為View中的數據並不一定在setContentView()時就載入完畢,因此小編的實驗結果是,log中啥都沒有。

原創文章,作者:KL4F3,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/130789.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
KL4F3的頭像KL4F3
上一篇 2024-10-03 23:27
下一篇 2024-10-03 23:27

相關推薦

  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29
  • 蝴蝶優化演算法Python版

    蝴蝶優化演算法是一種基於仿生學的優化演算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化演算法Python版…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智慧、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29

發表回復

登錄後才能評論