最近需要实现获取个人京东订单信息的功能,利用了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模拟登陆京东相关推荐

  1. Java程序模拟QQ空间登录 - 并模拟刷说说的赞(图文) 注意:腾讯修改了加密算法,已失效(2015-01-31)

    Java程序模拟QQ空间登录 - 并模拟刷说说的赞 背景:在2013-10-25的一天,有个friend在QQ问我:"post登陆QQ空间抓取不到post的数据".于是故事就开始了 ...

  2. Java爬虫(二)-- httpClient模拟Http请求+jsoup页面解析

    博客 学院 下载 GitChat TinyMind 论坛 APP 问答 商城 VIP会员 活动 招聘 ITeye 写博客 发Chat 传资源 登录注册 原 Java爬虫(二)-- httpClient ...

  3. java程序设计试题_《Java语言程序设计》期末考试模拟试题——填空题和编程题...

    一.根据题意,填写出空格中的内容 Java平台包括三个技术方向,其中J2ME代表____________.J2SE代表___________.J2EE代表____________.2.面向对象的四大概 ...

  4. 蓝桥杯 Java B组 省赛决赛模拟赛 详解及小结汇总+题目下载【2013年(第4届)~2021年(第12届)】

    蓝桥杯 Java B组 省赛决赛模拟赛 详解及小结汇总+题目下载[2013年(第4届)~2021年(第12届)] 百度网盘-CSDN蓝桥杯资料(真题PDF+其它资料)   提取码:6666 2013年 ...

  5. java 错误登陆次数_纯java代码实现登陆次数验证,登陆错误5次之后锁定30分钟

    本方法因为是根据思路纯手写,代码可以再简化,功能尝试没问题,最主要就是在登陆验证中的逻辑,checkLogin()方法是登录前的验证,而真正的登陆方式采用的是Shiro,若不是采用Shiro登陆,将该 ...

  6. java模拟运动,java线程赞助以及并发框架模拟运动员跑步比赛

    java线程协助以及并发框架模拟运动员跑步比赛 java多线程版本: import java.util.Collection; import java.util.Collections; import ...

  7. java程序填空题输出汤姆猫_《Java语言程序设计(新)》地大模拟

    <Java语言程序设计(新)>地大模拟 2020-08-29 08:08:08 635 有学员问关于<Java语言程序设计(新)>地大模拟的题目的参考答案和解析,具体如下: & ...

  8. java使用selenium实现模拟浏览器操作API大全 模拟登录

    java selenium 模拟登录 模拟浏览器 API大全 (一)环境安装之Java (二)环境安装之IntelliJ IDEA (三)环境安装之Selenium 1.通过jar包安装 2.通过Ma ...

  9. Java中使用MVC三层架构做登陆验证

    这里主要的内容是有关Java中MVC三层架构 目录 原始的登陆验证 分层改进(每个代码都是登录和验证两个功能) 使用分层想法做登陆验证 User类 表现层 业务层 持久层 原始的登陆验证 原始的登陆验 ...

最新文章

  1. css(hr元素)水平线的定位
  2. ABAP的Package interface, 安卓的manifest.xml和Kubernetes的Capabilities
  3. 转行学python后悔了-你是多少岁转行的?转行后你后悔了吗?
  4. 算法:正则表达式匹配
  5. Spring boot程序入口
  6. 表面粗糙度的基本评定参数是_表面粗糙度的概念,表面粗糙度形成因素,表面粗糙度评定依据...
  7. y7000p内存是一个16还是8+8_16层蜜瓜蛋糕,每日限量8件,只卖一个夏天!
  8. 动态生成的html元素无法调用js函数,如何确保动态生成的div在js函数被调用之前被加载到DOM中?...
  9. 王道计算机网络 数据链路层整理 超详细版
  10. 告毕业生书——七剑送你下天山
  11. 西南在线平台教育计算机应用基础答案,西南交《计算机应用基础》在线作业一...
  12. nodejs 图片处理模块 rotate_如何针对数据不平衡做处理?
  13. html5各种页面切换效果和模态对话框
  14. HCIE-Security Day20:GRE协议:实验(一)配置基于静态路由的GRE隧道
  15. 网易编程题-操作序列
  16. ESAYUI filebox 隐藏
  17. 除了 P站,原来还有A、C、D、E、G、H、K、M、N ... 站,全是老司机!
  18. html5拖拽表单设计器,require+jquery+backbone实现拖拽式报表设计器-拖拽式表单设计器...
  19. C++ RGB颜色(非图形化界面)
  20. (图解)一步一步使用CPP实现深度学习中的卷积

热门文章

  1. C语言程序设计十个币,C语言程序设计复习(10页)-原创力文档
  2. php redis序列化,php session之存储在redis的方法
  3. Android 音乐APP(一)扫描本地音乐
  4. CAD随机多面体3D 多面体骨料 凸多面体颗粒
  5. 解决Visio中Mathtype公式插入Word或复制后变形
  6. 数字IC(SoC)低功耗设计方法总结
  7. python车牌识别系统抬杆_昆明车牌识别自动抬杆系统
  8. Salesforce系列(五):Salesforce Apex基础SOSL查询和数据添加!
  9. PBR:基于物理的渲染(Physically Based Rendering)+理论相关
  10. SpringBoot+Vue实现邮箱登录注册找回密码(附接口文档)