python qq群文件_Python随笔|抓取QQ群成员头像
#文章首發于公眾號“如風起”。
原文鏈接:Python隨筆|抓取QQ群成員頭像?mp.weixin.qq.com
最近需要用到QQ群成員的頭像,但是,一個一個點開大家的頭像再保存太麻煩了,所以就寫了一段代碼抓取一下。
和大家分享一下這一段爬蟲代碼。Python版本:Python 3.8.0
操作平臺:PyCharm
使用的庫:requests、json、os
爬蟲目標:抓取QQ群成員的頭像,并以QQ昵稱命名文件名
騰訊有一個專門的管理QQ群的網頁:QQ群官網-成員管理?qun.qq.com
我們可以通過這個網頁抓取需要的QQ群的信息。
首先,我們登陸管理QQ群的官網,選擇一個群進入。
打開開發者工具,進入"Network",看下數據具體的位置,通過查找發現數據信息位于search_group_members下,數據在json里面,每一條即是一個成員的信息。
點開查看一下具體的內容。
通過比對,不難發現,其中,"card"表示QQ群備注;"nick"表示QQ昵稱;"uin"表示QQ號。
點擊"Headers",我們看一下頭部信息。
請求是post,我們查看一下表單數據。
其中,"gc"表示QQ群號,"st"表示開始成員,"end"表示結束成員,"bkn"是QQ群的加密參數,有點復雜,我們直接復制使用。
下面我們開始編寫抓取數據的代碼。
通過上面的分析,可以看到,表單信息顯示每次返回20條數據,為了爬取QQ群所以成員,我們需要定義一下data的函數。
def get_data(num):
data = {
'gc': '123456',#QQ群號
'st': num*21,
'end': num*21 + 20,
'sort': '0',
'bkn': '12345678'#直接從From Data復制過來
}
return data
然后,我們構造抓取QQ群成員信息的函數,利用"requests.post"進行抓取,并json庫將json轉化為list。
def get_con(url,data):
requests.packages.urllib3.disable_warnings()
response = response = requests.post(url, headers=headers, data=data)
response.encoding = response.apparent_encoding
text = json.loads(response.text)
content = text['mems']
for item in content:
xinxi = {
'qqmem': item['uin'], #QQ群成員QQ號
'beizhu': item['card'], #QQ群成員備注
'name': item['nick'] #QQ群成員昵稱
}
yield xinxi
然后,我們抓取QQ群成員的頭像,并用昵稱命名文件。
QQ頭像的圖片地址為:
其中"123456"表示成員的QQ號碼,通過更好QQ號碼,拼接新的連接,我們即可獲取成員頭像。
def get_pic(url):
for i in range(100):
try:
content = get_con(url=url, data = get_data(i))
if not os.path.isdir('picture'):
os.mkdir('picture')
for item in content:
pic_url = 'https://q4.qlogo.cn/g?b=qq&nk={}&s=140'.format(item['qqmem'])
print(pic_url, item['name'])
abs_path = os.path.join('picture', '%s.jpg' %item['name'])
open(abs_path, 'wb').write(requests.get(pic_url, verify=False).content)
except:
pass
復制瀏覽器的Headers,運行程序。
if __name__ == '__main__':
url = 'https://qun.qq.com/cgi-bin/qun_mgr/search_group_members'
get_pic(url)
爬取效果如下。
總結
以上是生活随笔為你收集整理的python qq群文件_Python随笔|抓取QQ群成员头像的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vue --- vue-router
- 下一篇: http --- 缓存