微信朋友圈分析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 mole 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 mole devlopment,創建一個Xposed項目。簡單Xposed模塊的基本思想是:hook某個APP中的某個方法,從而達到讀寫數據的目的。
5、在findAndHookMethod方法中,第一個參數為完整類名,第三個參數為需要hook的方法名,其後若干個參數分別對應該方法的各形參類型。在這里,Activity.setContentView(View view)方法只有一個類型為Vie的形參,因此傳入一個View.class。
6、結果是運行時可以從Log中讀取到每個Activity中的所有的TextView的顯示內容。但是,因為View中的數據並不一定在setContentView()時就載入完畢,因此小編的實驗結果是,log中啥都沒有。
⑶ 如何抓取微信朋友圈數據
你需要朋友圈的什麼數據呀!
⑷ 微信官方朋友圈廣告是用什麼原理進行大數據分析
是微信用戶的海量數據,篩選出與廣告商的定位一致的群體,例如用腎的,例如關注奢侈品、名車的,用各種標簽條件定義用戶,進而推送廣告。
其次:利用微信各種用戶數據勾勒出屬性,如用戶的收入,年齡,區域,教育水平,所處行業這類基本特徵,比對廣告商的產品定位人群屬性,以屬性相近的部分,加上事先做推廣測試時候的用戶反饋參數,如預告時右上角的是否感興趣選項,再篩選出來的群體,進而推送目標。
⑸ 用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 mole 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或R分析我的微博或者朋友圈
一. 你在瀏覽微博的時候,受到哪些用戶的影響。
1. 抓取你微博的關注列表,通過一定的條件篩選一部分用戶,繼續抓他們的關注列表,這樣抓兩到三層就行了,不然數據太大了。
2. 對抓取的用戶進行影響力建模,例如,用戶最近兩個月的微博的轉發評論和點贊數據
3. 最後分析出哪些用戶對你的影響最大
二. 基於地理位置的分析
1. 抓取以某個城市為發微博的地理位置的微博數據,並且抓取發微博的用戶的相關信息
2. 對數據清洗,通過用戶資料篩選出是否土著居民,還是旅遊出差之類的數據
3. 對數據分析,通過發微博的時間啊,某個地點發微博的次數啊,發微博出現最多的關鍵詞
這些應該能得到一些有意思的數據
三. 自然語言處理
微博的大量的文本數據可以做自然語言處理,情感分析之類的很多研究
四. 熱點事件追蹤
1. 通過關鍵詞的搜索,跟蹤熱點事件
2. 很多熱點事情都是某個微博開始發酵的,可以抓取轉發路徑,找出哪些是重要的轉發節點,
抓取評論內容,看看網友對這件事情的態度。
3. 監控微博博主的粉絲增加數量的變化
五. 計算機視覺相關研究
1. 抓取微博出現的圖片,做計算視覺相關的研究
2. 抓取微博用戶的頭像,做人臉識別之類的,應該很有意思。
六. 個人微博數據分析
1. 發微博時間
2. 微博出現的關鍵詞
3. 你點過哪些贊,評論過哪些微博。
4. 和哪些人發過私信,這些都可以研究,關鍵是找到合適的模型
⑻ 微信朋友圈怎麼查看以前評論的消息
1、點擊「發現」里的「朋友圈」
2、點擊朋友圈中自己的頭像,打開自己的朋友圈
3、在自己的朋友圈中,點擊右上角的三個點,出現「消息列表」
4、點開這個「消息列表」,就可以查看、編輯之前的所有消息記錄了,包括評論、回復和點贊。
微信朋友圈查看自己發過的贊和評論方式如下:
1、打開微信,點擊底部菜單欄"我",在彈出的自己的微信信息界面點擊「相冊」,
2、進入相冊頁面,點擊右上方兩個點的按鈕,
3、之後進入消息頁面,在這個頁面中記錄著自己或者別人點的贊和評論,
4、可以點擊我們給別人點贊評論的內容看一下,
擴展
打開手機里的微信,點擊「發現」里的「朋友圈」
點擊朋友圈中自己的頭像,打開自己的朋友圈
在自己的朋友圈中,點擊右上角的三個點,出現「消息列表」
點開這個「消息列表」,就可以查看、編輯之前的所有消息記錄了,包括評論、回復和點贊。這樣你想找某個消息,就不用在朋友圈裡費勁去翻了。
⑼ python爬取微信好朋友圈怎麼實現
有一個微信網頁版.模擬登陸是可以登陸上去的.但是看不了朋友圈.只能通過手機的方式進行爬取了.