java模拟京东登陆_requests+beautifulsoup模拟登陆京东
最近需要实现获取个人京东订单信息的功能,利用了requests+beautifulsoup来实现。
requests是python的第三方库,相比之前常用的python标准库中的urllib2,requests简直不要好用太多,具体实现思路是,首先使用firefox+firebug找到京东登陆所需要的信息,利用requests的get获取需要模拟登陆的信息,post之后获取cookie,然后带着cookie访问相应订单的网页就可以得到订单信息了。
打开京东登陆的网页,使用账户登陆京东,在firebug上查看传递的参数
loginname是登陆的用户名,loginpwd和nloginpwd都是登陆的密码。以machine开头的三个参数传递参数为空,authcode是验证码,如果京东检测到你登陆状态有异常就会提示输入验证码。
经过测试,我们需要获取的参数有uuid、-t、和eAHDKkiNwP三个参数
回到京东登陆界面寻找这三个参数,在登陆界面的源代码中可以看到有个id名称为formlogin的form标签
正好全部包含了登陆需要传递的参数,利用Beautifulsoup将对于name的value提取出来,放在构造post信息的字典中,将构造好的字典通过requests的post方法获取到登陆的cookie。这样,得到订单信息我们已经完成了一大半了。
下面是具体实现的部分源码import requestsfrom bs4 import BeautifulSoup
header= {'Host':'order.jd.com','Upgrade-Insecure-Requests':'1','Connection':'keep-alive','User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2700.0 Safari/537.36','Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8','Accept-Encoding':'gzip, deflate, sdch','Accept-Language':'zh-CN,zh;q=0.8','Cache-Control':'max-age=0'}
导入相应的包之后,需要构造header,网站服务器通过host来确定访问的网页,User-Agent是用户使用浏览器版本,系统的标签。许多网站会检查header中的host和User-Agent信息是否正确合理,不会处理未带正确header的请求,header可以在firebug上查看,这里我直接粘贴firebug上的,如果是大型的爬虫可以构造一个header池,每隔一段时间变更header中的User-Agent,简单的爬虫就不需要做的这么麻烦啦。sessions = requests.session()
login_page=sessions.get('https://passport.jd.com/new/login.aspx',headers = header)
login_soup = BeautifulSoup(login_page.text,'lxml')
login_postinfo = login_soup.find_all('form',attrs = {'id' : 'formlogin'})[0].find_all('input')
先构造一个sessions来帮助我们处理获取到的cookie,session可以自动处理cookie字符。
获取到登陆界面的text之后,先转换为beautiful可以处理的格式,login_postinfo为上文提到的formlogin下的所有input标签信息uuid = login_soup.find_all('input',attrs = {'id' : 'uuid'})[0]['value']
_t = login_soup.find_all('input',attrs = {'name' : '_t'})[0]['value']
利用beautifulsoup获取到uuid和_tfor input_info in login_postinfo:
if len(input_info['value']) == 5:
str1 = input_info['name']
str2 = input_info['value']
在提取最后一个关键key时和之前的不一样,它的key名是input标签中的name,value是标签中的value,所以我们无法按照name或id来提取,它们是一直在变化的,但是可以观察到一个规律,value值都是5个英文字母组成的,而input标签其他的value要不为空,要不有下划线或是一串很长的字符串,所以可以根据value的字符长度来定位到我们所需要的inputpost_info = {
'uuid':uuid,
'loginname':'XXXXX',
'loginpwd':'XXXX',
'machineCpu':'',
'machineDisk':'',
'machineNet':'',
'nloginpwd':'XXXX',
str1:str2,
'_t':_t,
'authcode':''}
content = sessions.post('http://passport.jd.com/uc/loginService',data=post_info,headers = header)
构造post信息的字典,通过sessions发送带着post字典的请求,可以得到success的信息
Paste_Image.png
然后我们就可以访问相应的界面获取想要的信息了
作者:芝士改变力量
链接:https://www.jianshu.com/p/368286617b13
java模拟京东登陆_requests+beautifulsoup模拟登陆京东相关推荐
- Java程序模拟QQ空间登录 - 并模拟刷说说的赞(图文) 注意:腾讯修改了加密算法,已失效(2015-01-31)
Java程序模拟QQ空间登录 - 并模拟刷说说的赞 背景:在2013-10-25的一天,有个friend在QQ问我:"post登陆QQ空间抓取不到post的数据".于是故事就开始了 ...
- Java爬虫(二)-- httpClient模拟Http请求+jsoup页面解析
博客 学院 下载 GitChat TinyMind 论坛 APP 问答 商城 VIP会员 活动 招聘 ITeye 写博客 发Chat 传资源 登录注册 原 Java爬虫(二)-- httpClient ...
- java程序设计试题_《Java语言程序设计》期末考试模拟试题——填空题和编程题...
一.根据题意,填写出空格中的内容 Java平台包括三个技术方向,其中J2ME代表____________.J2SE代表___________.J2EE代表____________.2.面向对象的四大概 ...
- 蓝桥杯 Java B组 省赛决赛模拟赛 详解及小结汇总+题目下载【2013年(第4届)~2021年(第12届)】
蓝桥杯 Java B组 省赛决赛模拟赛 详解及小结汇总+题目下载[2013年(第4届)~2021年(第12届)] 百度网盘-CSDN蓝桥杯资料(真题PDF+其它资料) 提取码:6666 2013年 ...
- java 错误登陆次数_纯java代码实现登陆次数验证,登陆错误5次之后锁定30分钟
本方法因为是根据思路纯手写,代码可以再简化,功能尝试没问题,最主要就是在登陆验证中的逻辑,checkLogin()方法是登录前的验证,而真正的登陆方式采用的是Shiro,若不是采用Shiro登陆,将该 ...
- java模拟运动,java线程赞助以及并发框架模拟运动员跑步比赛
java线程协助以及并发框架模拟运动员跑步比赛 java多线程版本: import java.util.Collection; import java.util.Collections; import ...
- java程序填空题输出汤姆猫_《Java语言程序设计(新)》地大模拟
<Java语言程序设计(新)>地大模拟 2020-08-29 08:08:08 635 有学员问关于<Java语言程序设计(新)>地大模拟的题目的参考答案和解析,具体如下: & ...
- java使用selenium实现模拟浏览器操作API大全 模拟登录
java selenium 模拟登录 模拟浏览器 API大全 (一)环境安装之Java (二)环境安装之IntelliJ IDEA (三)环境安装之Selenium 1.通过jar包安装 2.通过Ma ...
- Java中使用MVC三层架构做登陆验证
这里主要的内容是有关Java中MVC三层架构 目录 原始的登陆验证 分层改进(每个代码都是登录和验证两个功能) 使用分层想法做登陆验证 User类 表现层 业务层 持久层 原始的登陆验证 原始的登陆验 ...
最新文章
- css(hr元素)水平线的定位
- ABAP的Package interface, 安卓的manifest.xml和Kubernetes的Capabilities
- 转行学python后悔了-你是多少岁转行的?转行后你后悔了吗?
- 算法:正则表达式匹配
- Spring boot程序入口
- 表面粗糙度的基本评定参数是_表面粗糙度的概念,表面粗糙度形成因素,表面粗糙度评定依据...
- y7000p内存是一个16还是8+8_16层蜜瓜蛋糕,每日限量8件,只卖一个夏天!
- 动态生成的html元素无法调用js函数,如何确保动态生成的div在js函数被调用之前被加载到DOM中?...
- 王道计算机网络 数据链路层整理 超详细版
- 告毕业生书——七剑送你下天山
- 西南在线平台教育计算机应用基础答案,西南交《计算机应用基础》在线作业一...
- nodejs 图片处理模块 rotate_如何针对数据不平衡做处理?
- html5各种页面切换效果和模态对话框
- HCIE-Security Day20:GRE协议:实验(一)配置基于静态路由的GRE隧道
- 网易编程题-操作序列
- ESAYUI filebox 隐藏
- 除了 P站,原来还有A、C、D、E、G、H、K、M、N ... 站,全是老司机!
- html5拖拽表单设计器,require+jquery+backbone实现拖拽式报表设计器-拖拽式表单设计器...
- C++ RGB颜色(非图形化界面)
- (图解)一步一步使用CPP实现深度学习中的卷积
热门文章
- C语言程序设计十个币,C语言程序设计复习(10页)-原创力文档
- php redis序列化,php session之存储在redis的方法
- Android 音乐APP(一)扫描本地音乐
- CAD随机多面体3D 多面体骨料 凸多面体颗粒
- 解决Visio中Mathtype公式插入Word或复制后变形
- 数字IC(SoC)低功耗设计方法总结
- python车牌识别系统抬杆_昆明车牌识别自动抬杆系统
- Salesforce系列(五):Salesforce Apex基础SOSL查询和数据添加!
- PBR:基于物理的渲染(Physically Based Rendering)+理论相关
- SpringBoot+Vue实现邮箱登录注册找回密码(附接口文档)