1 from urllib importparse2 from selenium importwebdriver3 importrequests4 importjson5 from json importloads6 importtime7 importpymssql8 importdatetime9

10 def get_key_values(body,key,end =';'):11 """提取body中不包括的key,分片操作12

13 :param body: 父字符串14 :param key: 子字符串15 :param end: 结束字符串,默认为;16 :return: 不包括子字符串的字符串17 """

18 return body[body.find(key) + len(key): body.find(';', body.find(key))]19

20 defget_key(cookies):21 """获取cookie中的相关键的值22 解密23

24 :param cookies: 缓存25 :return: 相关键的值26 """

27 key = get_key_values(cookies,'p_skey=')28 h = 5381

29 for i inkey:30 h += (h << 5) +ord(i)31 return h & 2147483647

32

33 defweb_login_cookie():34 """url = 'https://user.qzone.qq.com/QQ号相关的缓存35 实现自动化登录36

37 :return: 浏览器的缓存38 """

39 driver =webdriver.Chrome()40 qq_account = '1612893772'

41 qq_password = '13974162858x'

42 login(driver,qq_account,qq_password)43 time.sleep(10)44 driver.get('https://user.qzone.qq.com/{}'.format(qq_account))45 cookie = ''

46 for elem in driver.get_cookies(): #记录相关的Cookie

47 #elem 为 dict类型

48 cookie += elem["name"] + "=" + elem["value"] + ";"

49 #cookies = cookie

50 returncookie51

52 deflogin(driver,qq_account,qq_password):53 """登录54

55 :param driver: 浏览器对象56 :param qq_account: QQ账号57 :param qq_password: QQ密码58 :return:59 """

60 driver.maximize_window()61 driver.get('http://user.qzone.qq.com')62 driver.switch_to.frame('login_frame')63 time.sleep(1)64 driver.find_element_by_id("switcher_plogin").click()65 driver.find_element_by_id("u").send_keys(qq_account)66 time.sleep(2)67 driver.find_element_by_id("p").send_keys(qq_password)68 time.sleep(2)69 driver.find_element_by_id("login_button").click()70

71 def send_requests(req,headers,url,params=None):72 """url_friend = 'https://user.qzone.qq.com/proxy/domain/r.qzone.qq.com/cgi-bin/tfriend/friend_ship_manager.cgi?'73 url_friend携带以下参数:uin(QQ号)、do(没有它,返回空,默认值为:1)74 rd,g_t,qzonetoken(每次登录都发生变化,从Cookiezz中获取)75 fupdate,clean(默认值为:1)76

77 :param req: 请求(Request),该请求为会话78 :param headers: 请求头79 :param params: 请求参数80 :return: JSONP数据81 """

82 if None !=params:83 url = url +parse.urlencode(params)84 #url = url+'&offset='+str(0)

85 page = req.get(url=url, headers=headers)86 returnpage.text87

88 defget_each_str(req,uin,headers):89 each_url = 'https://user.qzone.qq.com/{}'.format(uin)90 page = req.get(url=each_url, headers=headers)91

92 def friend_db(dicts,name=''):93 """操作DB94

95 :param dicts: 数据字典信息96 :param name: 备注名97 :return: void98 """

99 if len(str(dicts['birthyear'])) < 4:100 dicts['birthyear'] = '1900'

101 if dicts['birthday'][1:2] == '0':102 dicts['birthday'] = '01-01'

103 if len(dicts['signature']) > 70:104 dicts['signature'] = ''

105 friend_db_dict ={106 'friendInfo': [107 dicts['uin'], name, dicts['age'], '男' if dicts['sex'] == 1 else '女'

108 , datetime.datetime.strptime(str(dicts['birthyear']) + '-' + str(dicts['birthday']), '%Y-%m-%d')],109 'friendPlace': [110 dicts['uin'], dicts['company'],dicts['career'], dicts['hco'] + dicts['hp'] + dicts['hc'],111 dicts['country'] + dicts['province'] + dicts['city'],dicts['cco'] + dicts['cp'] + dicts['cc'], dicts['cb']],112 'friendNet': [113 dicts['uin'], dicts['nickname'], dicts['spacename'], dicts['desc'], dicts['signature']]114 }115 conn = pymssql.connect(host='localhost', user='sa', password='123456', database='friendDB',116 charset='utf8')117 cur =conn.cursor()118 sql = "begin tran insertData insert into friendInfo values({},'{}',{},'{}','{}');"\119 "insert into friendPlace values({},'{}','{}','{}','{}','{}','{}');"\120 "insert into friendNet values({},'{}','{}','{}','{}');"\121 "commit tran insertData".\122 format(friend_db_dict['friendInfo'][0],friend_db_dict['friendInfo'][1],friend_db_dict['friendInfo'][2]123 ,friend_db_dict['friendInfo'][3],friend_db_dict['friendInfo'][4],friend_db_dict['friendPlace'][0],124 friend_db_dict['friendPlace'][1],friend_db_dict['friendPlace'][2],friend_db_dict['friendPlace'][3],125 friend_db_dict['friendPlace'][4],friend_db_dict['friendPlace'][5],friend_db_dict['friendPlace'][6],126 friend_db_dict['friendNet'][0],friend_db_dict['friendNet'][1],friend_db_dict['friendNet'][2],127 friend_db_dict['friendNet'][3],friend_db_dict['friendNet'][4])128 print('sql:',sql)129 cur.execute(sql)130 conn.commit()131 cur.close()132 conn.close()133

134 defmain():135 """主要操作136

137 :return: void138 """

139 req =requests.session()140 headers={'host': 'h5.qzone.qq.com',141 'accept-encoding':'gzip, deflate, br',142 'accept-language':'zh-CN,zh;q=0.8',143 'accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',144 'user-agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/'

145 '59.0.3071.115 Safari/537.36',146 'connection': 'keep-alive'}147 cookie =web_login_cookie()148 print('cookie',cookie)149 g_tk =get_key(cookie)150 qzonetoken_friend = get_key_values(cookie,'ptcz=')151 uin_friend = get_key_values(cookie,'ptui_loginuin=')152 rd_friend = get_key_values(cookie,'_qpsvr_localtk=')153 print('friend_data','qzontoken:%s;uin:%s;rd:%s' %(qzonetoken_friend,uin_friend,rd_friend))154 headers['Cookie']=cookie155 params_friend = {"uin": uin_friend,"fupdate": 1,"action": 1,"do":1,"g_tk":g_tk,"rd":rd_friend,156 'qzonetoken':qzonetoken_friend}157 url_friend = 'https://user.qzone.qq.com/proxy/domain/r.qzone.qq.com/cgi-bin/tfriend/friend_ship_manager.cgi?'

158 data_friend_str = send_requests(req,headers,url_friend,params=params_friend)159 data_friend_dict = loads(data_friend_str[0+len('_Callback('):data_friend_str.find(');')])160 print('data_friend_dict:',data_friend_dict)161 if data_friend_dict['code'] != 0: #code = -3000 message = '请先登录'

162 time.sleep(10)163 main()164 else:165 data_friend_list = list(data_friend_dict['data']['items_list'])166 for i inrange(len(data_friend_list)):167 each_uin = data_friend_list[i]['uin']168 each_url = 'https://h5.qzone.qq.com/proxy/domain/base.qzone.qq.com/cgi-bin/user/cgi_userinfo_get_all?'

169 params_each = {"uin": each_uin, "fupdate": 1, "vuin": uin_friend, "g_tk": g_tk, "rd": rd_friend,170 'qzonetoken': qzonetoken_friend}171 time.sleep(1)172 data_each_str =send_requests(req,headers,each_url,params_each)173 try:174 data_each_dict = loads(data_each_str[0+len("_Callback("):data_each_str.find(");")])175 exceptjson.decoder.JSONDecodeError as e:176 with open('leak.txt','a',encoding='utf8') as file: #数据持久化,统计错误信息

177 file.write('except:' + str(each_uin) + " " + data_friend_list[i]['name'] + " " + e.msg + "\n")178 continue

179 print('data_each_dict:',data_each_dict)180 if data_each_dict['code'] == 0: #code = -4009 message = '没有访问权限'

181 friend_db(data_each_dict['data'],name=data_friend_list[i]['name'])182 else:183 with open('leak.txt','a',encoding='utf8') as file: #数据持久化,统计错误信息

184 file.write(('没有访问权限:' + str(each_uin) + " " + data_friend_list[i]['name'] + "\n"))185 main()

python爬取加密qq空间_python3.7 爬取QQ空间好友相关推荐

  1. python爬取加密qq空间_python3爬虫爬取QQ好友空间说说

    开发环境Win10 python 3.6.3 pycharm 2018.1 第三方库csv requests pymysql selenium 无头浏览器 PhantomJS 主要思路通过QQ邮箱导出 ...

  2. python3抓取b站弹幕_python3写爬取B站视频弹幕功能

    需要准备的环境: 一个B站账号,需要先登录,否则不能查看历史弹幕记录 联网的电脑和顺手的浏览器,我用的Chrome Python3环境以及request模块,安装使用命令,换源比较快: pip3 in ...

  3. python 12306查询不到车次_Python3.x 抓取12306车次信息,表格详情显示,让你学会思路,分析网站特点,爬取数据。12306车票查看器!...

    我的例子都比较适合新手,那种老司机请绕道,谢谢! ps 前言 最近学习Python,所以呢?跟大家一样,都是看看官网,看看教程,然后就准备搞一个小东西来试试,那么我使用的例子是实验楼中的12306火车 ...

  4. python爬取音乐并保存_python3 实现爬取TOP500的音乐信息并存储到mongoDB数据库中

    爬取TOP500的音乐信息,包括排名情况.歌曲名.歌曲时间. 网页版酷狗不能手动翻页进行下一步的浏览,仔细观察第一页的URL: 这里尝试将1改为2,再进行浏览,恰好是第二页的信息,再改为3,恰好是第三 ...

  5. python爬取付费电影思路_python3爬虫爬取猫眼电影TOP100(含详细爬取思路)

    待爬取的网页地址为https://maoyan.com/board/4,本次以requests.BeautifulSoup css selector为路线进行爬取,最终目的是把影片排名.图片.名称.演 ...

  6. python爬取加密qq空间_使用python+selenium爬取qq空间好友动态

    使用python+selenium爬取qq空间好友动态 分析过程如下: 要想用selenium登陆qq空间,必须点击账号密码登陆按钮然后再填写账号密码登陆. 1.PNG 点击账号密码按钮后跳转到如下页 ...

  7. python爬取qq音乐评论_爬虫:QQ音乐评论

    QQ音乐评论 有些小伙伴反馈,对于爬虫的完整流程,还是不清楚,这边就按顺序,给大家梳理一下 反爬 首先查看一下,我们要爬取的网页,是否反爬(各种侵害人家服务器的事情,我们不能干) QQ音乐网址:htt ...

  8. Python网络爬虫数据采集实战:Scrapy框架爬取QQ音乐存入MongoDB

    ​    通过前七章的学习,相信大家对整个爬虫有了一个比较全貌的了解 ,其中分别涉及四个案例:静态网页爬取.动态Ajax网页爬取.Selenium浏览器模拟爬取和Fillder今日头条app爬取,基本 ...

  9. python爬取凤凰新闻网_python3.6爬取凤凰网新闻-爬虫框架式思维

    一.序言 先前几篇爬虫的代码,是简单的脚本代码.在爬取小网页觉得挺简单.高效,但涉及复杂网页的时候,就要考虑成熟的爬虫框架与分布式.本篇博客作为无框架式爬虫和有框架式爬虫的一个过渡,介绍具有框架式思维 ...

最新文章

  1. AI专利之争:小米超华为,国家电网才是大Boss?
  2. java环境教程_window下Java环境配置图文教程
  3. C++/CLI思辨录之传递托管堆地址
  4. 求职中最吃香的编程语言:JavaScript、Java 和 Python
  5. 会话技术Cookie
  6. RAC环境下创建本地数据文件的解决方法
  7. php 网页转pdf
  8. C语言变量初始化是必须的
  9. 买买买!!!电商促销必备的气氛PSD分层海报
  10. Register code
  11. OSChina 周五乱弹 ——变态要从娃娃抓起
  12. 在装完Linux系统之后自己去修改Swap分区的大小(两种方法)
  13. python安装whl文件的注意事项(windows系统)
  14. 【LeetCode】贪心算法:常见典例
  15. C语言程序设计谭浩强版 六
  16. JAAS Authorization文档
  17. 《汽车之家》字体反爬之论坛、问答、文章(新闻、车家号)及其评论爬取
  18. 如何不授权情况下获取自己微信openid/傻瓜式获取
  19. 微软邮箱smtp服务器,微软hotmail免费邮箱申请(5G邮箱容量) 支持pop3、smtp
  20. 阳春三月,正是樱花绽放时,借此机会给午饭献上鲜艳艳的视觉盛宴!

热门文章

  1. Elasticsearch中的date与时区问题
  2. 如何从科学论文中实现一个算法
  3. matlab两横排合并,Matlab设置Legend横排、分块
  4. windows server 2008 r2 介绍
  5. 飞机WiFi遭遇卫星波段选择难
  6. 推荐系统召回总结(持续更新)
  7. 简单算法解决汉诺塔问题
  8. 图像处理领域的大牛(转载收藏)
  9. matplotlib实现自动调整横纵坐标范围
  10. SOLIDWORKS: Mold Design SOLIDWORKS:模具设计 Lynda课程中文字幕