网页抓取qq(Python版本:Python3.8.0操作平台()(图) )
优采云 发布时间: 2021-10-14 03:05网页抓取qq(Python版本:Python3.8.0操作平台()(图)
)
Python 版本:Python 3.8.0
操作平台:PyCharm
使用的库:requests、json、os
爬虫目标:抓取QQ群成员头像,以QQ昵称命名文件名
腾讯有专门的QQ群管理网页:
我们可以通过这个网页抓取需要的QQ群信息。
首先我们登录QQ群管理官网,选择一个群进入。
打开开发者工具,输入“网络”,查看数据的具体位置,通过搜索发现数据信息位于search_group_members下,数据在json中,每一块都是一个成员的信息。
点击查看具体内容。
通过对比不难发现,“卡片”就是QQ群评论;“nick”表示QQ昵称;“uin”表示QQ号码。
点击“Headers”,我们看一下header信息。
请求是一个帖子,让我们检查一下表单数据。
其中,“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转换成列表。
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头像图片地址为:
/g?b=qq&nk=123456&s=140
其中,“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
复制浏览器的标题并运行程序。
if __name__ == '__main__':
url = 'https://qun.qq.com/cgi-bin/qun_mgr/search_group_members'
get_pic(url)
爬取效果如下。