作者:xiaoyu

微信公众号:Python数据科学

知乎:Python数据分析师

前两篇和大家分享了爬虫中http的一些概念和使用方法,基础篇我们主要介绍了http的请求头,高级篇我们主要介绍了cookie和session(具体可以点击上面链接进行回顾)。但其实在爬虫中还有很多关于http的内容需要了解,例如 token,oauth等。对于这些概念博主将在后续文章中逐一的详细介绍,本篇主要针对前两篇内容与大家分享一个模拟登录的实战例子。

开始想以知乎为例,但是看到网上关于知乎模拟登录的教程太多了,所以就以“京东”为例。

大家都知道,京东是不需要登录就可以访问主页内容的,因此模拟登录的意义在于查看个人信息,比如可以获取个人的交易信息(购物车商品,购物历史记录,待收货商品信息等),或者卖家的商品销售信息和评论等等。

好了,了解背景过后,让我们开始模拟登录吧。

准备工作

大家都知道,模拟登录其实就是通过http的post请求方式来提交用户信息的(用户名和密码)。对于浏览器而言,只输入用户名和密码就可以登陆了(偶尔有验证码),那是因为浏览器在背后都帮你处理好了。而爬虫的模拟登录过程需要我们自己解决,因此我们需要弄清楚浏览器的那些背后操作是如何进行的才能对症下药。

难点分析:

寻找提交表单所需字段信息

cookie信息的获取和使用

验证码的处理

我们打开浏览器,博主用的Chrome浏览器。首先使用Ctrl+Shift+N进入干净的无痕模式,防止之前的cookie数据造成干扰。

表单字段信息

现在我们通过开发者工具来看看浏览器背后都干了什么吧。有的朋友提问到,输入用户名和密码后页面直接跳转到主页面了,看不到我们要的数据了。其实这里只需要故意将你的密码输错不进入跳转就可以解决了。

点击登录,然后我们看到有个FormData,这就是浏览器每次向服务器提交的表单信息。

第一眼看过去感觉快要无望了。但是别着急,这些字段信息其实都是有处可寻的。我们Ctrl+U打开京东登录页面的源码里,然后Ctrl+F 试着搜一搜这些字段信息。

先搜第一个uuid字段,发现它就在源码中,紧着后面是一些其它的字段信息,那就齐活了。我们看到除了loginname,nloginpwd,authcode,其他的字段全都是hidden的类型,也就是被隐藏了的字段。

好了,那下一步就自然知道干什么了。我们可以直接请求登录页面源码提取字段信息了。

Cookie的处理

Cookie可以通过使用http的Cookiejar定制opener进行获取,也可以直接使用requests模块来实现。

requests模块实现起来比较方便,因为内部已经封装好了自动处理Cookie的功能。第一次发送请求可以通过服务器获取Cookie,后续的请求则会自动带着已获取的Cookie信息进行发送。当然,也可以手动添加Cookie,手动添加的Cookie优先级高,将会覆盖默认的信息。

为了说明模拟登录的用法,本篇博主将使用简便的requests模块来完成对Cookie的处理。

验证码的处理

验证码的处理方法也有多种,可以分为自动识别的和手动识别。

手动处理验证码就是通过验证码链接将验证码图片下载到本地,然后手动敲入完成信息录入。

自动识别是使用一些高级的算法技术来完成的,可以使用OCR智能图文识别,机器学习进行识别训练等。

本篇将选择手动录入验证码,旨在理解模拟登录的过程。

代码实现

初始信息配置

创建了一个JD_crawl的类,设置了实例的headers和session会话对象,以及三个后面请求需要用到的url。

因为整个登录是一个完整的过程,所以后续若干请求需要共同使用同一个session会话对象。

提取表单登录信息

首先对登录的login_url发起请求,获取登陆页面源码后通过BeautifulSoup解析工具ccs选择器来提取隐藏字段信息。

loginname,nloginpwd,authcode三个非隐藏字段需要用户手动录入。

对于是否需要录入验证码的问题,可以通过请求https://passport.jd.com/uc/sh...(代码中的auth_url)来判断。

请求结果是一个如下格式的字符串。

请求结果: ({"verifycode":xxx})

xxx:true 或者 false

因此可以简单的查看结果中是否有true来判断是否需要验证码。

如果为true就需要调用验证码函数方法,将验证码图片下载,输入图片上的验证码,并赋给authcode字段进行表单提交完成登录。

如果为false则不需要验证码,authcode字段为空字符串。

一般当我们多次输入了错误的账号或密码时,构成安全危险,就会提示输入验证码。

获取验证码

从源码获取的验证码链接是一个相对链接src2

src2="//authcode.jd.com/verify/image?a=1&acid=dcb4370b-2763-44e6-83ff-4b89bc01193d&uid=dcb4370b-2763-44e6-83ff-4b89bc01193d"

因此,我们需要将它补全,在src2前面拼接字符串 http: 。但是当我们尝试这个url的时候会发现图片并没有下载成功,为什么呢?

因为还需要在结尾加上时间戳,接着看后边的 onclick,它的字符串中有和src2完全一样的链接,但在结尾处多了 &yys= ''。通过观察内容发现有 date 和 time 字样,于是可以判断这可能是一个时间戳字符串。

οnclick="this.src= document.location.protocol +'//authcode.jd.com/verify/image?a=1&acid=dcb4370b-2763-44e6-83ff-4b89bc01193d&uid=dcb4370b-2763-44e6-83ff-4b89bc01193d&yys='+new Date().getTime();$('#authcode').val('');"

小提示:

时间戳(引自百度百科):

时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。

时间戳在Python中可以用time模块来完成:

time.time()*1000

将验证码图片存为jpg格式,储存在项目文件目录下。

可以看到图片就在目录下,我们双击打开然后按照图片输入验证码。

模拟登录

根据获取的表单登录信息进行提交登录。

注意这里的 Service 中的 "S" 是大写。

如果登录成功,则会显示以下字符串。

({"success":"http://www.jd.com"})

登录验证及结果

为了验证登录真的成功了,现将博主的购物车拿出来做实验,如果在获取源码中找到了指定商品名称,那么就说明成功了。

好吧,都是之前随便放的,就以牙线为测试目标吧。

简单的请求了一下购物车url。在下载的源码中搜索“牙”,然后找了目标。

总结

本篇主要介绍了京东商城的模拟登录方法,当然还有一些网站的登录机制比较复杂,比如weibo登录需要调用api,需要我们详细阅读api说明。

后续将会分享更多模拟登录的内容,欢迎大家指正。

关注微信公众号Python数据科学,获取 120G 人工智能 学习资料。

python模拟登录网站_Python爬虫实战之(四)| 模拟登录京东商城相关推荐

  1. python爬虫登录网站_python爬虫19 | 遇到需要的登录的网站怎么办?用这3招轻松搞定!...

    你好 由于你是游客 无法查看本文 请你登录再进 谢谢合作 当你在爬某些网站的时候 需要你登录才可以获取数据 咋整? 莫慌 小帅b把这几招传授给你 让你以后从容应对 那么 接下来就是 登录的常见方法无非 ...

  2. python 爬网站 实例_python爬虫实战:之爬取京东商城实例教程!(含源代码)

    前言: 本文主要介绍的是利用python爬取京东商城的方法,文中介绍的非常详细,下面话不多说了,来看看详细的介绍吧. 主要工具 scrapy BeautifulSoup requests 分析步骤 1 ...

  3. python爬虫登录下载_Python爬虫实战入门四:使用Cookie模拟登录——获取电子书下载链接...

    在实际情况中,很多网站的内容都是需要登录之后才能看到,如此我们就需要进行模拟登录,使用登录后的状态进行爬取.这里就需要使用到Cookie. 现在大多数的网站都是使用Cookie跟踪用户的登录状态,一旦 ...

  4. python模拟登录网站_Python爬虫之模拟登录wechat

    不知何时,微信已经成为我们不可缺少的一部分了,我们的社交圈.关注的新闻或是公众号.还有个人信息或是隐私都被绑定在了一起.既然它这么重要,如果我们可以利用爬虫模拟登录,是不是就意味着我们可以获取这些信息 ...

  5. python脚本根据cookies自动登录网站_Python爬虫如何使用Cookies登录网站

    最近搞到了一个学校教务系统可以查询全校成绩的账号,恰逢申请奖学金之际,就想用python写个脚本把年级里的绩点排名给爬下来,可是就在写登录的时候发现还是要处理验证码登录的问题,为了避免麻烦,就没使用类 ...

  6. python爬网易新闻_Python爬虫实战教程:爬取网易新闻;爬虫精选 高手技巧

    Python爬虫实战教程:爬取网易新闻:爬虫精选 高手技巧 发布时间:2020-02-21 17:42:43 前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有, ...

  7. python爬取喜马拉雅_Python爬虫实战案例之爬取喜马拉雅音频数据详解

    这篇文章我们来讲一下在网站建设中,Python爬虫实战案例之爬取喜马拉雅音频数据详解.本文对大家进行网站开发设计工作或者学习都有一定帮助,下面让我们进入正文. 前言 喜马拉雅是专业的音频分享平台,汇集 ...

  8. python绩点计算_Python爬虫实战(3):计算大学本学期绩点

    本篇目标 1.模拟登录学生成绩管理系统 2.抓取本学期成绩界面 3.计算打印本学期成绩 1.URL的获取 先贴一个URL,让大家知道学校学生信息系统的网站构架,主页是http://jwxt.sdu.e ...

  9. python二手交易平台代码_PYTHON爬虫实战_垃圾佬闲鱼爬虫转转爬虫数据整合自用二手急速响应捡垃圾平台_3(附源码持续更新)...

    说明 文章首发于HURUWO的博客小站,本平台做同步备份发布. 如有浏览或访问异常图片加载失败或者相关疑问可前往原博客下评论浏览. 原文链接 PYTHON爬虫实战_垃圾佬闲鱼爬虫转转爬虫数据整合自用二 ...

最新文章

  1. python怎么做彩票概率_用Python一次性把论文作图与数据处理全部搞定!
  2. vuejs学习笔记(1)--属性,事件绑定,ajax
  3. python怎么反转单链表_单链表反转python实现代码示例
  4. srs代码学习(1)--listen建立过程
  5. mysql 统计本月的_mysql 查询当天、本周,本月,上一个月的数据
  6. 针对中位数求解的几道题
  7. 安装mysql connector odbc后在控制面板 数据源下没有找到mysql的驱动
  8. C++ STL 容器的合并、求差集、交集等操作实例 含详细注释版
  9. Atitit.增强系统稳定性----虚拟内存的设置
  10. word整个表格首行缩进_WORD取消表格首行缩进
  11. 二极管伏安特性曲线_二极管的温度特性
  12. iPhone长截图快捷指令(科技兽修改版)
  13. 软件工程与计算II-24-考试总结
  14. Linux 命令(186)—— atq 命令
  15. 图片太大时不会出现横向滚动条
  16. Hp服务器系统盘被热拔插会怎么样,被骗十几年 原来这些设备不能热插拔!
  17. Neo4j 图数据库高级应用系列 / 服务器扩展指南 APOC 8.6 - 图生成 小世界模型
  18. 超融合服务器是什么?和超融合一体机什么区别?
  19. 543.diameter-of-binary-tree
  20. java计算机毕业设计体育新闻网站源码+系统+数据库+lw文档+mybatis+运行部署

热门文章

  1. mos管的rc吸收电路计算_RCD吸收电路
  2. java jtextarea字体_Jtextarea如何设置不同字体、颜色
  3. Spring配置SessionFactory
  4. 函数的递归调用(C++)
  5. 【多目标进化优化】 MOEA 测试函数
  6. java 声明和动态创建数组
  7. 关于Git的rebase操作与cherry-pick操作的建议
  8. curl命令详解 (curl -I)
  9. pgpool 主从流复制模式下的安装使用
  10. 对openmv色块查找的思考笔记