200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > Python笔记:网络爬虫之模拟人人网登录及获取数据的过程详解

Python笔记:网络爬虫之模拟人人网登录及获取数据的过程详解

时间:2022-05-11 08:53:51

相关推荐

Python笔记:网络爬虫之模拟人人网登录及获取数据的过程详解

概述

使用urllib模拟人人网的登录的过程使用urllib模拟人人网登录后获取个人数据的过程使用urllib模拟登录及获取个人数据的过程使用requests模拟登录及获取个人数据的过程重点了解其中用于状态维持和会话跟踪的技术此文档具有时效性, 只针对当前人人网有效;在代码中模拟的数据并非真实数据, 如要正确运行, 请替换成自己的数据此文档的目的:仅提供积累知识、运用相关库解决问题的思路分享 😃

使用urllib库模拟人人网的登录的过程

# 模拟人人网登陆操作from urllib import request, parse# 经过浏览器分析,页面上提交地址为:/PLogin.do# 真正提交地址为:login_url = "/ajaxLogin/login?1=1&uniqueTimestamp=8038"# 经过浏览器xhr请求分析,真正的提交参数为:# 不确定哪些是必须提交的数据,可以模拟浏览器所有数据均提交data = {'email': '15311111111', # 此处为你的手机号'icode': '','origURL': '/home','domain': '','key_id': 1,'captcha_type': 'web_login','password': '4566d0f4a94fyyz4f940abcd23f6a48f62589726a63106a2d7112ce194113cd1', # 此处是页面脚本加密后的密码'rkey': '00b732e6c4b8d408b75655e15dd43a82','f': 'http%3A%2F%%2F111111111%2Fnewsfeed%2Fphoto'}data = parse.urlencode(data)headers = {'Content-Length': len(data)}req = request.Request(login_url, data=bytes(data, encoding="utf-8"), headers=headers)res = request.urlopen(req)print(res.read().decode('utf-8')) # {"code":true,"homeUrl":"/home"} 此处表示登陆成功,将要跳转

使用urllib库模拟人人网登录后获取个人数据的过程

# 模拟人人网登陆操作from urllib import request, parseimport gzipimport re# 示例:req_url = "/11111111"req_url = "/your-id"# 经过浏览器xhr请求分析,因为不确定具体要提交哪些参数,以下是全部参数信息headers = {'Host': '','Connection': 'keep-alive','Upgrade-Insecure-Requests': 1,'DNT': 1,'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36','Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3','Referer': '/SysHome.do','Accept-Encoding': 'gzip, deflate','Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8','Cookie': 'anonymid=k2jogzmy45d6g1; depovince=GW; _r01_=1; JSESSIONID=abcTX9kPXDXiC-MXhZT4w; ick_login=eda6bae3-1016-4b43-8653-c0b0e88bf6c1; ick=ef6c24f7-ccc8-4110-8c8d-e60fa7783869; XNESSESSIONID=367a0c8b5c12; Hm_lvt_668f5751b331d2a1eec31f2dc0253443=1567945461; first_login_flag=1; ln_uact=15311111111; ln_hurl=/photos/0/0/men_main.gif; wp_fold=0; jebecookies=34444812-0d3f-48b3-b7ca-01ae41fcf755|||||; Hm_lpvt_668f5751b331d2a1eec31f2dc0253443=1567947038; _de=57D139C64A11F200F1AEE8096E718C50; p=3e26031d8967cf591201ca56c7a2147d7; t=41388b62070609b8ad5462bac60219cd7; societyguester=41388b62070609b8ad5462bac60219cd7; id=772777777; xnsid=cc1b3f4c; loginfrom=syshome'}req = request.Request(req_url, headers=headers)res = request.urlopen(req)html = gzip.decompress(res.read()).decode('utf-8') # 因为请求头上支持gzip传输,此处在响应的时候要通过gzip来解压缩#print(html)print(re.findall(("<title>(.*?)</title>"), html)) # ['人人网 - 你的名字'] 此处会输出如下信息

使用urllib库模拟登录及获取个人数据的过程

'''模拟人人网登录和获取个人主页数据的整个过程通过cookie管理器,用于状态维持和会话跟踪技术'''# 模拟人人网登陆操作from urllib import request, parseimport gzipimport re,timefrom http import cookiejar # cookie管理模块cookie = cookiejar.CookieJar() # 获取cookie对象cookie_handler = request.HTTPCookieProcessor(cookie) # 返回一个cookie管理器opener = request.build_opener(cookie_handler) # 获取一个带cookie的请求管理器, 用于状态维持和会话跟踪技术# 登录函数def doLogin():login_url = "/ajaxLogin/login?1=1&uniqueTimestamp=8038"data = {'email': '15311111111','icode': '','origURL': '/home','domain': '','key_id': 1,'captcha_type': 'web_login','password': '4566d0f4a94fyyz4f940abcd23f6a48f62589726a63106a2d7112ce194113cd1','rkey': '00b732e6c4b8d408b75655e15dd43a82','f': 'http%3A%2F%%2F111111111%2Fnewsfeed%2Fphoto'}data = parse.urlencode(data)headers = {'Content-Length': len(data)}req = request.Request(login_url, data=bytes(data, encoding="utf-8"), headers=headers)res = opener.open(req)print(res.read().decode('utf-8')) # {"code":true,"homeUrl":"/home"} 此处表示登陆成功,将要跳转print('登录成功!')# 获取个人数据def getData():# 请求示例:/111111111req_url = "/your-id"req = request.Request(req_url)res = opener.open(req)html= res.read().decode('utf-8')print(re.findall(("<title>(.*?)</title>"), html)) # ['人人网 - 你的名字'] 此处会输出如下信息if __name__ == "__main__":# 登录print("登录中...")doLogin() # 登录操作# 此处用于模拟,应该在回调中实现获取个人数据time.sleep(2) # 此处仅作模拟, 延迟2s的时间getData() # 获取个人数据

使用requests库模拟登录及获取个人数据的过程

'''模拟人人网登录和获取个人主页数据的整个过程通过cookie管理器,用于状态维持和会话跟踪技术'''# 模拟人人网登陆操作import requestsimport gzipimport re,timeses = requests.Session() # 获取可以维持会话状态的请求对象# 登录函数def doLogin():login_url = "/ajaxLogin/login?1=1&uniqueTimestamp=8038"data = {'email': '15311111111','icode': '','origURL': '/home','domain': '','key_id': 1,'captcha_type': 'web_login','password': '4566d0f4a94fyyz4f940abcd23f6a48f62589726a63106a2d7112ce194113cd1','rkey': '00b732e6c4b8d408b75655e15dd43a82','f': 'http%3A%2F%%2F111111111%2Fnewsfeed%2Fphoto'}ses.post(login_url, data=data)print('登录成功!')# 获取个人数据def getData():# 请求示例:/111111111req_url = "/your-id"res = ses.get(req_url)html = res.content.decode('utf-8')print(re.findall(("<title>(.*?)</title>"), html)) # ['人人网 - 你的名字'] 此处会输出如下信息if __name__ == "__main__":# 登录print("登录中...")doLogin() # 登录操作# 此处用于模拟,应该在回调中实现获取个人数据time.sleep(2) # 此处仅作模拟, 延迟2s的时间getData() # 获取个人数据

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。