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)

爬取效果如下。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值