文章目录

  • 前言
  • 一、方法的选择
  • 二、通过QQ空间获取好友信息
  • 三、通过QQ查找获取好友信息



前言

关于写这篇文章我做了很多工作,想了很多办法,尝试过QQ邮箱、QQ空间、QQ查找抓包,最终也没有选出一个好方法,不能爬下完全的数据,但能尽可能的爬下多的数据 包括昵称、网名、分组、年龄、地址

看一下效果

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


提示:以下是本篇文章正文内容,下面案例可供参考

一、方法的选择

首先我们先看一下如果通过QQ邮箱能获取什么数据,如果说是通过QQ邮箱爬QQ好友信息,那只能拿到昵称和QQ邮箱号 所以不选择这中方法

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


再来看看通过QQ空间能拿到哪些数据,我们在QQ空间发动态那里点击部分好友可见,目的是将好友数据全部加载出来,观察抓包后的结果 可以看到其中有分组、昵称、网名、qq号、头像链接

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


我们在来看看QQ查找能抓到什么数据,我们进入find.qq.com,在其中输入qq查找,抓包 看能抓到什么数据,我们可以看到有QQ号,年龄、国家、性别、省份、头像链接

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


最终我选择的方法是通过QQ空间和QQ查找两种方法相结合的方式,尽可能的获取多的数据

二、通过QQ空间获取好友信息

现在我们通过QQ空间获取好友信息,因为只有通过QQ空间获得了好友的QQ号,我们才能通过QQ查找获取更多的数据

在上面我们已经找到了QQ空间好友信息数据包,并且所有的QQ好友信息都在一个数据包中,现在我们可以直接写代码

head={
    'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36',
    'cookie':'tvfe_boss_uuid=3eec8ab61924dc8d; pgv_pvid=5532717881; RK=CnIgT93OeT; v8=44'
}
text=requests.get(url=url,headers=head).text
text=text.replace("_Callback","").replace("(","").replace(")","")
text="".join([text.strip().rsplit("}", 1)[0], "}"])
data=json.loads(text)
for da in data["data"]["items"]:
    dic={}
    try:
        dic["qq"]=da["uin"] #QQ号码
    except:
        dic["qq"]=""
    try:
        dic["groupid"]=da["groupid"]  #QQ分组
    except:
        dic["groupid"]=""
    try:
        dic["name"]=da["name"]  #QQ网名
    except:
        dic["name"]=""
    try:
        dic["remark"]=da["remark"]  #QQ备注
    except:
        dic["remark"]=""
    try:
        dic["img"]=da["img"]  #QQ头像链接
    except:
        dic["img"]=""
    try:
        dic["yellow"]=da["yellow"]  #黄钻等级
    except:
        dic["yellow"]=""
    with open(".//QQ_KJ.csv", "a+", encoding="utf-8") as f:
        writer = csv.DictWriter(f, dic.keys())
        writer.writerow(dic)

三、通过QQ查找获取好友信息

通过上面的操作我们已经拿到了六列QQ好友信息,现在我们来通过QQ查找获取其他信息

我们在最上面已经抓包获取了数据包,现在我们来分析一下他的url和所带的有用参数,url是不变的,在边的一直是参数准确的说变得就是keyword 就是好友QQ号

url:https://find.qq.com/proxy/domain/cgi.find.qq.com/qqfind/buddy/search_v3
参数:
keyword= QQ好友QQ号
ldw= 你自己的参数

通过上面的url和参数,利用requests访问就可以获取QQ好友的部分数据,现在我们来代码实现

#读取数据
 names=["qq","groupid","name","remark","img","yellow"]
 df=pd.read_csv("QQ_KJ.csv",names=names)
 print('-' * 30 + "开始获取QQ查找数据" + '-' * 30)
 #通过qq号生成参数
 params_list=[]
 for qq in df.qq:
     params={
         'keyword':qq,
         'ldw':你的参数
     }
     params_list.append(params)
 print('-'*30+"共生成%d个参数"%(len(params_list))+'-'*30)
 head = {
     'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36',
     'cookie': 'tvfe78CA4C2DAE58860A362928729B50; uid=1015261235; skey=@6bAznJAMu'
 }
 url="https://find.qq.com/proxy/domain/cgi.find.qq.com/qqfind/buddy/search_v3"
 #遍历参数列表访问页面解析数据
 print('-' * 30 + "开始访问页面获取数据"+ '-' * 30)
 for params in params_list:
 #因为有的QQ好友设置了限制 限制QQ查找找到自己 所有try
     try:
         text=requests.get(url=url,headers=head,params=params).json()
         data=text["result"]["buddy"]["info_list"][0]
         with open(".//QQ_find.csv", "a+", encoding="utf-8") as f:
             writer = csv.DictWriter(f, data.keys())
             writer.writerow(data)
     except:
         pass

最后我们将两个文件的数据处理一下

def Save_data(self):
    names = ["qq", "groupid", "name", "remark", "img", "yellow"]
    df1 = pd.read_csv("QQ_KJ.csv", names=names)
    names = ["qq", "name", "country", "provinc", "city", "gender","age","url"]
    df2 = pd.read_csv("QQ_find.csv", names=names).drop(["url","qq"],axis=1)
    df=pd.merge(df1,df2,on="name",how="left") #根据name列左连接两个表
    df=df.drop_duplicates("remark").reset_index(drop=True) #根据备注列去重
    os.remove("QQ_find.csv") #删除表
    os.remove("QQ_KJ.csv") #删除表
    df.to_csv("QQ_find.csv",encoding="utf_8_sig")