在线教育首页
销售热线   010-53279888       0315-5918118    客户热线   0315-5913666
OA登陆 邮箱登陆 简体中文 English 网站地图
新闻中心
在线教育官网怎么样
业内动态
在线教育注册
公司新闻
用Python模拟知乎自动登录
    您现在的位置:在线教育 > 远程教育 > 正文 发布时间:2019-06-12 11:25

  而造水机可以为潜艇提供软水。

    考核工作安排  (一)时间地点  时间:2019年5月31日8:00—17:30。迟到者视为自动放弃。  地点:武汉市洪山区鲁磨路388号中国地质大学医院(东区)。  (二)考核内容  1.操作  操作考试时间:2019年5月31日8:00—12:00  抽签时间:2019年5月31日8:00  应聘者按抽签顺序逐一进行检验技能操作考试。  2.笔试  笔试时间:2019年5月31日8:00—12:00  采取闭卷考试方式,考核医学检验相关理论知识。

用Python模拟知乎自动登录

用Python模拟知乎自动登录Python语言是由GuidovanRossum大牛在1989年发明,它是当今世界最受欢迎的计算机编程语言之一,也是一门“学了有用、学了能用、学会能久用”的计算生态语言。

前言文章会按照先原理,再实践的方式来讲解,希望可以做到知其然且知其所以然,读这篇文章前,你需要对HTTP协议、Cookies、跨站请求伪造(CSRF)有一定了解,如果你不太了解这些概念,文末给出了两个链接推荐阅读。 在做爬虫时,有些页面在登录之前,是被禁止抓取的,比如我们查看知乎的话题页面就要求我们登录。

当提到「登录」时,就不得不提Cookie技术,而说起Cookie技术时,还得从HTTP协议说起。 当然在这里我不会把HTTP从0到1讲一遍,你只需要了解基本的HTTP流程是什么就可以了,推荐阅读我之前在公众号「Python之禅」中写的另一篇文章一次完整的HTTP请求过程HTTP是一种无状态的协议,协议本身不保留之前的一切请求信息和响应信息,也就是说,对于一个刚刚发送了HTTP请求的客户端再次发起请求时,服务端并不知道之前访问过。 这样设计的理由是为了更快地处理大量事务,确保协议的可伸缩性,而特意把HTTP协议设计如此简单。

但是,无状态导致业务处理就变得棘手了,一个简单的例子就是网上购物的时候,当我在一个页面把商品加入购物车的时候,正当我要跳转到支付页面时,如果没有一种机制来保持我的登录状态,那么之前选的商品全部丢失了。 因此,为了在无状态的HTTP协议之上维护会话状态,使服务可以知道当前是和哪个客户端打交道,于是Cookie技术应运而生,Cookie通俗的理解就是服务端分配给客户端的一个标识。

Cookie原理其实也非常简单,总共4个步骤维护HTTP会话。

1.浏览第一次发起HTTP请求时,没有携带任何Cookie信息,服务收到请求并返回给浏览的HTTP响应,同时HTTP响应包括了一个响应头Set-Cookie字段,它的值是要设置的Cookie。

2.浏览收到来自服务的HTTP响应,响应头中发现有Set-Cookie字段,就会将该字段的值保存在内存或者硬盘中。

3.浏览下次给该服务发送HTTP请求时,会将Cookie信息附加在HTTP请求的头字段Cookie中。

4.服务收到这个HTTP请求,发现请求头中有Cookie字段,便知道之前就和这个用户打过交道了。

理解了Cookie的基本原理之后,我们就可以尝试用Python来实现模拟知乎登录。

用过知乎的都知道,只要提供用户名和密码以及验证码之后即可登录。 当然,这只是我们眼中看到的,而背后隐藏的技术细节还需要借助浏览来发觉。

现在我们就用Chrome来查看当我们填完表单后,点击登录的时候究竟发生了什么?首先进入知乎的登录页面,打开Chrome的开发者工具条(按F12)先尝试输入一个错误的验证码观察浏览是如何发送请求的。

从浏览的请求可以发现几个关键的信息:1.登录的URL地址是2.登录需要提供的表单数据有4个:用户名(email)、密码(password)、验证码(captcha)、_xsrf。

3.获取验证码的URL地址是那么_xsrf参数是什么?如果你对CSRF(跨站请求伪造)攻击非常熟悉的话,那么你一定知道它的作用,xsrf是一串伪随机数,它是用于防止跨站请求伪造的。 它一般存在网页的form表单标签中,为了证实这一点,可以在页面上搜索“xsrf”,果然,从下图可以看到_xsrf在一个隐藏的input标签中。

到这里,基本上摸清了浏览登录时所需要的数据是如何获取的了,那么现在就可以开始撸代码用Python模拟浏览来登录。

登录时所依赖的两个第三方库是requests和BeautifulSoup,先安装。 pipinstallbeautifulsoup4====获取xsrf前面已经找到了xsrf所在的标签,,利用BeatifulSoup的find方法可以非常便捷的获取该值,当然,如果你熟悉正则表达式,也可以不用BeatifulSoupdefget_xsrf():response=(https://,headers=headers)soup=BeautifulSoup(,)xsrf=(#39;input#39;,attrs={name:_xsrf}).get(value)returnxsrf获取验证码验证码是通过/接口返回的,这里我们把验证码图片下载保存到当前目录,由人工识别,当然你可以用第三方支持库来自动识别,比如pytesser。

defget_captcha():把验证码图片保存到当前目录,手动识别验证码:return:t=str(int(()*1000))captcha_url=#39;https:///=#39;+t+type=loginr=(captcha_url,headers=headers)withopen(#39;#39;,#39;wb#39;)asf:()captcha=input(验证码:)returncaptcha登录一切参数准备就绪之后,就可以请求登录接口了。

deflogin(email,password):login_url=#39;https:///login/email#39;data={#39;email#39;:email,#39;password#39;:password,#39;_xsrf#39;:get_xsrf(),captcha:get_captcha(),#39;remember_me#39;:#39;true#39;}response=(login_url,data=data,headers=headers)login_code=()print(login_code[#39;msg#39;])()最后运行返回的结果是“登录成功”。

表明登录成功了。

细心的你可能已经发现了,我调用了一个()方法,我是把cookie信息保存到了本地,下次请求其他需要登录的页面时,就可以把cookie信息携带上了。 session=()=(filename=#39;cookies#39;)try:(ignore_discard=True)except:print(还没有cookie信息)。

 
在线教育提供的文章均由网友转载于网络,若本站转载中的文章侵犯了您的权益,请与本站管理员联系.
Copyright (C) 2006-2019 www.33588j.com在线教育_教育宝_教育理念 All Rights Reserved