记录一下爬取自己的全部QQ好友的QQ号码的过程

首先通过在QQ邮箱页面抓包发现了一个网址

python qq 加好友 python爬取对方qq好友_Python

把连接放到python中进行爬取

python qq 加好友 python爬取对方qq好友_Python_02

发现爬取的内容与浏览器看到的不同,于是我们添加标头

python qq 加好友 python爬取对方qq好友_Python_03

看到成功返回了内容

python qq 加好友 python爬取对方qq好友_python qq 加好友_04

但却发现其类型虽然为json格式,但却存在许多格式错误导致无法通过json模块进行转化

虽说我们可以通过网上的json格式化工具进行转化,但是由于我想使其步骤尽量由Python实现,所以我采取了较为笨拙一点的正则表达式进行提取

python qq 加好友 python爬取对方qq好友_正则表达式_05

我们首先通过观察成功格式化的json文本发现关键信息主要存放在以下两个分组中

  • sortbyupdatetime 存放着最近联系人以及全部的好友信息
    好友信息的格式如下
  • qqgroups 将上面信息中的编号分组放置

于是我们开始完善代码,解析代码如下

response = requests.get(url, headers=headers).text

friend_info = re.findall('sortbyupdatetime(.*?)qqgroups', response, re.S)[0]
friend_info = friend_info.strip(" :,[]").split('],[')

# 将编号跟QQ号保存到字典中
dic = {}
for i in friend_info:
    i = i.split(',')
    dic[i[0].strip('""')] = i[2].strip('@qq.com"')

# 将分组中的编号转化为列表形式
qqgroups = re.findall('qqgroups(.*?)groups', response)[0]
qqgroups = qqgroups.strip(" :,[]")[1:-1].split('],[')

# 根据编号提取QQ号
for i in qqgroups:
    find_numbers = re.findall(r'\[(.*?)\]', str(i))[0].split(',')
    for find_number in find_numbers:
        if find_number in dic:
            qqs.append(dic[find_number])

# 保存到文本文件中
with open('qq.txt', 'w', encoding='utf-8') as file:
    file.write('\n'.join(qqs))

成果展示

python qq 加好友 python爬取对方qq好友_正则表达式_06