Requests通过Session保持会话,获取数据
最近在爬一个网站,通过登录之后,获取信息。
遇见的问题:
采取的selenium模拟登陆。因为有验证码的关系,直接用requests实现登陆不太方便,所以采用的selenium模拟登陆。
登陆之后,使用selenium中的get_cookies获取的cookie 并不能直接拿回数据,和数据所在的请求接口中的cookie有区别。
真实数据所在的cookie多了一个参数。
经过一番的js调试,想要模拟出set-cookie的过程,直接**cookie来拿回数据。
一番调试之后,发现js的层级关系过于复杂,选择了放弃。
后来选择了Session保持会话的功能来获取数据。
通过抓包之后发现:
数据所在请求接口之前,先访问了这样一个页面:
接着往上寻找,
发现这样一个页面请求:
对两个框中的url进行拼接。
是不是可以得到url?接着用session进行保持会话即可。
代码如下:
def session_keep(self): try: url = '***********'.format( time.time() * 1000) headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36', 'Referer': '******************', 'Cookie': 'AD_RS_COOKIE=20110970;SSO_LOGIN_TGC=dec7e66ddd77486da11751ddef4f6045;TGC=TGT-2767-h3FbVj7kFgPXMgRykbOiMRFjnXpQ0Ljn2Ik4vQsyYsSVVlTrii-hbdzswj;DZSWJ_TGC=58bdb8a5b8ce4ae89cba755114cba6ff;JSESSIONID=WetH1vXrPMx3uPhFoi4pikUaBneHN9Ph7-5_QH_fcnmUsM2EukQZ!-912544654' } res = self.s.get(url=url, timeout=10, headers=headers, verify=False).text nextUrl = "***************************" + \ re.findall('src="./static/js/common/vendor.js\?(.*?)"', res)[0] self.s.get(nextUrl, headers=headers, verify=False) except Exception as e: msg = traceback.format_exc() print(msg) return False, '建立保持会话失败'