Python3 itchat微信獲取好友、公眾號、群聊的基礎信息
一、簡介
安裝 itchat
pip install itchat
使用個人微信的過程當中主要有三種賬號需要獲取,分別為:
- 好友
- 公眾號
- 群聊
itchat為這三種賬號都提供了整體獲取方法與搜索方法。
而群聊多出獲取用戶列表方法以及創建群聊、增加、刪除用戶的方法。
這里我們分這三種分別介紹如何使用。
二、好友
好友的獲取方法為get_friends,將會返回完整的好友列表。
- 其中每個好友為一個字典
- 列表的第一項為本人的賬號信息
- 傳入update鍵為True將可以更新好友列表並返回
#登錄(只需要掃碼一次,第二次運行手機微信會彈出確認框) itchat.auto_login(hotReload=True) #登錄(每次登錄都要掃二維碼) #itchat.login() #爬取自己好友相關信息, 返回一個json文件 friends = itchat.get_friends(update=True)[0:] #print(friends)
好友的搜索方法為search_friends,有四種搜索方式:
1. 僅獲取自己的用戶信息。
2. 獲取特定UserName的用戶信息。
3. 獲取備注、微信號、昵稱中的任何一項等於name鍵值的用戶。
4. 獲取備注、微信號、昵稱分別等於相應鍵值的用戶 。
其中三、四項可以一同使用,下面是示例程序:
# 獲取自己的用戶信息,返回自己的屬性字典 itchat.search_friends() # 獲取特定UserName的用戶信息 itchat.search_friends(userName='@abcdefg1234567') # 獲取任何一項等於name鍵值的用戶 itchat.search_friends(name='wxceshi') # 獲取分別對應相應鍵值的用戶 itchat.search_friends(wechatAccount='wceshi') # 三、四項功能可以一同使用 itchat.search_friends(name='wxceshi', wechatAccount='wcceshi')
三、公眾號
公眾號的獲取方法為get_mps,將會返回完整的公眾號列表。
- 其中每個公眾號為一個字典
- 傳入update鍵為True將可以更新公眾號列表並返回
import itchat #登錄(只需要掃碼一次,第二次運行手機微信會彈出確認框) itchat.auto_login(hotReload=True) #登錄(每次登錄都要掃二維碼) #itchat.login() mpsList=itchat.get_mps(update=True)[1:] total=0 for it in mpsList: print(it['NickName']+':'+it['Signature']) total=total+1 print('公眾號的數目是%d'%total)
公眾號的搜索方法為search_mps,有兩種搜索方法:
1. 獲取特定UserName的公眾號。
2. 獲取名字中含有特定字符的公眾號 。
如果兩項都做了特定,將會僅返回特定UserName的公眾號,下面是示例程序:
# 獲取特定UserName的公眾號,返回值為一個字典 itchat.search_mps(userName='@abcdefg1234567') # 獲取名字中含有特定字符的公眾號,返回值為一個字典的列表 itchat.search_mps(name='gzh') # 以下方法相當於僅特定了UserName itchat.search_mps(userName='@abcdefg1234567', name='gzh')
四、群聊
群聊的獲取方法為get_chatrooms,將會返回完整的群聊列表。
其中每個群聊為一個字典
- 傳入update鍵為True將可以更新群聊列表並返回通訊錄中保存的群聊列表
- 群聊列表為后台自動更新,如果中途意外退出存在極小的概率產生本地群聊消息與后台不同步
- 為了保證群聊信息在熱啟動中可以被正確的加載,即使不需要持續在線的程序也需要運行itchat.run()
- 如果不想要運行上述命令,請在退出程序前調用-itchat.dump_login_status(),更新熱拔插需要的信息
import itchat #登錄(只需要掃碼一次,第二次運行手機微信會彈出確認框) itchat.auto_login(hotReload=True) #登錄(每次登錄都要掃二維碼) #itchat.login() #itchat.run() mpsList=itchat.get_chatrooms(update=True)[1:] total=0 for it in mpsList: print(it['NickName']) total=total+1 print('群聊的數目是%d'%total) #顯示所有的群聊,包括未保存在通訊錄中的,如果去掉則只是顯示在通訊錄中保存的 itchat.dump_login_status() #獲取群成員信息,UserName的值是動態的(每登錄一次生成新的UserName) memberList = itchat.update_chatroom('@@d79840106086e26e76f86857c440f403c8bbeedff17bf4851c7bf4901a3bfdeb') #print(memberList['MemberList']) #獲取群成員昵稱和群昵稱 mlist = memberList['MemberList'] for it in mlist: print(it['NickName']+':'+it['DisplayName'])
群聊的搜索方法為search_chatrooms,有兩種搜索方法:
1. 獲取特定UserName的群聊。
2. 獲取名字中含有特定字符的群聊 。
如果兩項都做了特定,將會僅返回特定UserName的群聊,下面是示例程序:
# 獲取特定UserName的群聊,返回值為一個字典 itchat.search_chatrooms(userName='@abcdefg1234567') # 獲取名字中含有特定字符的群聊,返回值為一個字典的列表 itchat.search_chatrooms(name='LittleCoder') # 以下方法相當於僅特定了UserName itchat.search_chatrooms(userName='@abcdefg1234567', name='LittleCoder')
群聊用戶列表的獲取方法為update_chatroom。
- 群聊在首次獲取中不會獲取群聊的用戶列表,所以需要調用該命令才能獲取群聊的成員
- 該方法需要傳入群聊的UserName,返回特定群聊的用戶列表
memberList = itchat.update_chatroom('bcdefg67')
創建群聊、增加、刪除群聊用戶的方法如下所示:
- 由於之前通過群聊檢測是否被好友拉黑的程序,目前這三個方法都被嚴格限制了使用頻率
- 刪除群聊需要本賬號為群管理員,否則會失敗
- 將用戶加入群聊有直接加入與發送邀請,通過useInvitation設置
- 超過40人的群聊無法使用直接加入的加入方式,特別注意
memberList = itchat.get_friends()[1:] # 創建群聊,topic鍵值為群聊名 chatroomUserName = itchat.create_chatroom(memberList, 'test chatroom') # 刪除群聊內的用戶 itchat.delete_member_from_chatroom(chatroomUserName, memberList[0]) # 增加用戶進入群聊 itchat.add_member_into_chatroom(chatroomUserName, memberList[0], useInvitation=False)