网页抓取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)

  爬取效果如下。

  

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线