我想写一个查询话费和流量的爬虫,关键是实现模拟登陆的这个部分。

在登陆过程中,点击登陆之后,登陆表单会 post 到一个地址(这一步浏览器不显示),然后会 302 跳转到登陆成功的页面。

我现在想得到登陆成功的 cookies ,不知道该怎么提取,requests.session()并没有得到登陆成功的 cookies.

得不到登陆成功的 cookies ,代码就不能爬取登陆之后的查询信息。

我有三个问题

1.post 表单这个过程,也就是图一中的 cookies 是怎么生成的,因为我发现 post 表单过程中的 cookies 比在进入登陆页面中的多。

2.登陆过程中有两次 302 ,最后再 200 到登陆成功页面,我该怎么得到 200 的这个 cookie 。

3.request.sission()是会自动管理登陆过程中的 cookies 吗,用不用单独提取登陆之后的 cookies 。

代码如下,谢谢大家

#coding=utf-8

import requests

import re

# request headers

Head ={'Accept-Language': 'zh-CN,zh;q=0.8', 'Accept-Encoding': 'gzip, deflate, sdch', 'Host': 'ah.189.cn',

'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 'Upgrade-Insecure-Requests': '1', 'Connection': 'keep-alive', 'Cache-Control': 'max-age=0',

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36'}

# Chrome 打开登陆页面提取的 cookies

Cook = {'Hm_lvt_333c7327dca1d300fd7235c159b7da04': '1469964315',

'lid': '', '_gscu_1758414200': '69964315ee6pb621', 'v_lasttime': '1469964315502',

'_gscs_1758414200': '69964315tq317521|pv:1', 'Hm_lvt_c7c8eed8670bd7fffefc8b202fe0904d': '1469964315',

'v_url_code': 'http%3A//ah.189.cn/sso/login%3FreturnUrl%3D%252Fbiz%252Fservice%252Faccount%252Finit.action',

'JSESSIONID_SSO': 'Jh1GXdgDZJqdZqpLvRQvZzdlvT7y6BxHhCny9MhbKh1Kw1hSLNt2Q1c6231LrHQWrpDL4m115pz0YTLJN7jx2fmpTfPBx1JwlYvvkLBRySmy18tnW1c2Q7qPvQqK9kJP!463350529',

'v_trackId': '1BD7B46E79FE234CE9C67E49D95245FB', 'Hm_lpvt_333c7327dca1d300fd7235c159b7da04': '1469964315',

'_gscbrs_1758414200': '1', 'Hm_lpvt_c7c8eed8670bd7fffefc8b202fe0904d': '1469964315',

'JSESSIONID_PERSONWEB': 'p2MyXdgGd8f5phjTTv2CJMr6J8QYhSyLX0kkZHlSwpppjhYGf3qm!1538637772'}

#登陆提交的表单

postdata = {'remPwd': '0',

'loginName': '',

'returnUrl': '/biz/service/account/init.action',

'validCode': '',

'loginType': '4', 'sysId': '1003', 'passType': '0',

'csrftoken': '',

'accountType': '9', 'ssoAuth': '0',

'passWord': '',

'latnId': '551'}

#登陆页面

baseurl = 'http://ah.189.cn/sso/login?returnUrl=%2Fbiz%2Fservice%2Faccount%2Finit.action'

#登陆表单 post 的地址

posturl = 'http://ah.189.cn/sso/LoginServlet'

sess = requests.session()

sess.headers.update(Head)

def getP(url,cookies):

"""带 session()requests 的 get 方法"""

pre = sess.get(url,cookies = cookies)

return pre

def getVerifyURL(url):

"""从主页提取验证码地址"""

reg = r'/sso/VImage.servlet\?random=0\.[0-9]+' #正则表达式匹配验证码图片链接

img = re.search(reg,getP(url,cookies = Cook).content).group()

imge = "http://ah.189.cn" + img #得到验证码图片链接

return imge

def getCodePic():

"""下载验证码图片"""

verifyURL = getVerifyURL(baseurl)

codePic = getP(verifyURL,cookies = Cook).content

print verifyURL

with open('x.jpeg','wb') as jpg:

jpg.write(codePic)

def postData():

"""post 表单信息更新"""

username = raw_input("输入手机号")

code = raw_input("输入密码")

passwd = raw_input("输入验证码")

postdata['loginName'] = str(username)

postdata['validCode'] = str(code)

postdata['passWord'] = str(passwd)

getCodePic()

postData()

postover = sess.post(posturl,postdata) #post 表单

cookLogin = postover.cookies #查看 post 表单之后的 cookies

print cookLogin

con = sess.get('http://ah.189.cn/biz/service/account/init.action')

#登陆成功的页面

print "登陆成功",con

python重定向cookie_模拟登陆中 302 重定向和 cookies 的一些困惑相关推荐

  1. python项目实战:模拟登陆CSDN

    2019独角兽企业重金招聘Python工程师标准>>> 前言 今天为大家介绍一个利用Python模拟登陆CSDN的案例,虽然看起来很鸡肋,有时候确会有大用处,在这里就当做是一个案例练 ...

  2. python模拟登陆遇到重定向_Python requests jira登录302重定向

    总结一下自己在用Python requests库对jira进行的一个bug统计时,在登录遇到的问题,以前也遇到过登录302重定向的问题,那个时候用requests同样的方法没有获取到cookie,但是 ...

  3. python如何实现模拟登录_超详细的Python实现新浪微博模拟登陆(小白都能懂)

    最近由于需要一直在研究微博的爬虫,第一步便是模拟登陆,从开始摸索到走通模拟登陆这条路其实还是挺艰难的,需要一定的经验,为了让朋友们以后少走点弯路,这里我把我的分析过程和代码都附上来. 首先,我们先用正 ...

  4. 超详细的Python实现百度云盘模拟登陆(模拟登陆进阶) 1

    这是第二篇从简书搬运过来的文章(大家别误会,是我原创的).因为前一篇文章,我看反响还挺好的,所以把这篇也搬运过来了,其实目的还是为宣传自己的分布式微博爬虫(该项目的内容和工作量都很饱满啊,大家如果觉得 ...

  5. Python爬虫之模拟登陆

    女神找我倾诉,实验室实验选不上,刚出来就被秒了,让我帮她选实验,我想我这万年单身的手速估计还是抢不过我这些师兄们,干脆写一个脚本吧,这样以后女神就找我选实验了,废话少说,切入主题,看这篇教程首先得保证 ...

  6. python 大众点评模拟登陆_python项目实战:模拟登陆163邮箱,简单到爆

    前言 相信大家都会做一些有趣的Python项目,对于小白的我们来说,如果成功了的话,那成就感是非常爆棚的的,这也是非常有助学习. 接下来,为大家介绍一个selenium 模拟登陆163邮箱的代码 首先 ...

  7. 利用python requests库模拟登陆知乎

    当初搜模拟登陆的时候在知乎上也找到一些内容. 以下是代码 import requests import time import json import os import re import sys ...

  8. python爬虫(一):模拟登陆微博

    最近花了不少时间来学python爬虫,觉得还是有很多问题的,比如说requests.get获得Pixiv的网页源代码,一直获取不到,不过我猜测大概是headers的问题,准备之后处理. 废话少说我们先 ...

  9. python之scrapy模拟登陆人人网

    1.settings.py主要配置信息,包括USER_AGENT等 # -*- coding: utf-8 -*-# Scrapy settings for renren project # # Fo ...

最新文章

  1. C4D灯光照明技术学习教程
  2. iOS 网络状态判断方案(支持iOS11和iPhoneX)
  3. 盘点丨春节假期里你错过的人工智能重要新闻
  4. 05.analysis-normalizer应用
  5. 升讯威微信营销系统开发教程:(1)订阅号和服务号深入分析
  6. java中的path类_详谈java中File类getPath()、getAbsolutePath()、getCanonical的区别
  7. ios信号从4g变成无服务器,苹果信号满格显示是4g却没网络
  8. dnf加物理攻击的卡片有哪些_DNF:节日宝珠之外百分比神器附魔,拍卖行100w,实用不氪金...
  9. 追踪盗窃12亿用户登录数据的网络犯罪团伙
  10. 未知账户(S-1-5-21)无法删除的问题
  11. 阶段1 语言基础+高级_1-3-Java语言高级_07-网络编程_第2节 TCP协议_4_TCP通信的服务器端代码实现...
  12. 2022年上半年网络工程师下午真题及答案
  13. 中华文字改革第一人——仓颉
  14. PLSQL Developer破解注册码
  15. UE4 虚幻 常用的流程控制蓝图节点介绍
  16. 笔试题目——研发工程师笔试题
  17. 360无线wifi 无法连接服务器,360wifi连接上但上不了网的解决方法
  18. 关于手机app合并m3u8文件失效,pc端合成方法
  19. 高德地图显示服务器加载失败,常见问题
  20. el-select 远程搜索时 没有箭头图标

热门文章

  1. cogs2840. 二叉查找树
  2. python数据分析笔记中panda(2)
  3. python基础之名称空间和作用域、函数嵌套
  4. Git从零教你入门(4):Git服务之 gogs部署安装
  5. 将JSON转成DataSet(DataTable)
  6. Linux系统中的load average
  7. 大型Javascript应用架构的模式(译文)
  8. C++学习——set与map
  9. 数据结构——堆的C语言实现
  10. Leetcode--91. 解码方法