基于Python的爬虫模拟OAuth2.0授权登录

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2018.08

网络爬虫是一个程序或脚本,根据某些规则自动从万维网获取信息。网络爬虫主要分为爬虫、通用网络爬虫、增量爬虫(增量爬虫)和Deep Web 爬虫(Deep Web)。聚焦爬虫又被称作为主题爬虫,是一个为了爬取与主题相关页面的爬虫。主要解决的是使用聚焦网络爬虫在获取所需资源中遇到需要通过OAuth2.0登录的问题。

1爬虫模拟登录的基本策略

随着大数据时代的到来,海量的数据爆炸式的出现

在网络之中[1]

。数据所包含的价值也逐渐凸显出来,需要从互联网中获取海量的数据,以手工获取的形式效率低下,如果以爬虫的形式获取需要的数据则会节省大量的人力物力。在通过爬虫获取需要数据的过程中,被爬取网站常常要求登录后才能访问某些页面。并且许多网站是通过OAuth2.0授权来获取页面访问权限的。

当前常见的爬虫模拟登录的策略有:

策略一:爬虫模拟浏览器登录对应网站,通过使用代码来模拟浏览器的登录从而获取对应网站的Cook⁃ies 信息并且储存,这种方法实现难度较高,但是不需要考虑到Cookies 过期的问题。

策略二:间接通过各种方式从浏览器获取包含用户信息的Cookies,把Cookies 放在代码中,这种策略实现比较难度低,但是Cookies 容易过期,在大规模使用时繁琐。

主要利用策略一来实现爬虫模拟OAuth2.0授权登录。

2OAuth2.0授权的实现流程

OAuth2.0的认证流程如图1所示[2],具体流程如下:

(1)客户端(Client)携带身份验证信息向认证服务器

(Authorization server)请求认证;(2)认证服务器验证用户身份信息,验证成功返回访问许可(Authorization

code);(3)客户端携带从认证服务器获取到的访问许可访问资源服务器(Resource server)

(4)资源服务器

验证客户端提交的访问许可,验证成功后资源服务给客户端访问令牌,访问令牌中包括作用域、有效时间以及其他属性[3]。

3

爬虫通过OAuth2.0授权登录

3.1获取需要提交表单值

通过浏览器调试工具获取登录所需要提交的表单信

息如图2所示,大部分网站提交的表单包括账号、密码以及数个hidden 域的字段,hidden 域的字段的作用主要是为了收集和发送信息,hidden 域的字段值分为固定值和随机值。可以通过浏览器调试工具查看多次提交流基金项目:2017年国家大学生创新创业训练计划项目(项目编号201711654008),湖北省教育厅教研项目(2016424)。

作者简介:张少谦(1998-),男,研究方向:软件工程;周天宏(1963-),男,通讯作者,硕士,教授,研究方向:计算机应用、计算机辅助教育等。收稿日期:2018-06-05

基于Python 的爬虫模拟OAuth2.0授权登录

张少谦,周天宏*

(武汉商学院信息工程学院,武汉430056)

要:随着大数据时代的到来,越来越多的信息涌入互联网。以人工的形式在互联网中获取所需信息费时费力,而以网络爬虫的形式获取所需资源节省则大量人力物力财力。在通过网络爬虫获取所需资源的过程中爬虫需要模拟人工登录从而获取某些资源,网络爬虫的模拟登录是实现网络爬虫的一个重要环节,以Python 语言作为开发语言,解决使用网络爬虫过程中所遇到的需要通过模拟OAuth2.0授权登录的问题。剖析了模拟登录整体流程,并且给出了爬虫通过OAuth2.0登录的具体的应用实例。关键词:网络爬虫;模拟登录;OAuth2.0授权登录

图1OAuth2.0的工作流程

认证服务器

客户端

资源服务器

44

2018.08

程来确定hidden 域的字段是随机值还是固定值。根据两次提交结果例如图2、图3中对比可得出username、password、_evebtld 以及rmShown 为固定值,而execu⁃tion 和lt 为随机值。固定值可直接使用,但随机值需要

在登录界面抓取对应值。

使用Python 的requests 库获取所需表单信息中变化的值,通过BeautifulSoup4库来解析html 页面并从中提取所需的hidden 域变化字段值。

ids =request.session()r =ids.get(url)#获取网页

soup =BeautifulSoup(r.text,"html.parser")#转换#为BeautifulSoup 对象

s =soup.select("input")#选择input 元素

data["execution"]=s[3]["value"]#获取execution 值data["lt"]=s[2]["value"]#获取lt 值、3.2爬虫的请求消息头(headers )

抓取数据时候,通常会遭遇网站的反爬虫措施。通

用PIN 用于请求消息头(头文件)中的用户代理。若未设置,则User-Agent 会自动声明为爬虫脚本。若网站有反爬虫措施,会拒绝此类请求。可以通过修改请求消息头来伪装成浏览器以达到正常访问的目的。3.3获取资源站点的AccessToken

向授权服务器提交表单,授权服务器验证信息,

返回Accsess Token,一般情况访问的授权服务器需带有资源服务器的URL。当使用浏览器登录,授权服务器验证账号密码,然后授权服务器返回状态码(state code)302Found 重定向,新URL 将在响应中携带访问许可,浏览器会使用新的URL 发送请求。

【HTTP 协议

技术浅析】为了不使获取到的授权服务器cookies 被覆

盖,需禁止爬虫的301跳转,从Response 中取出Loca⁃tion 值。使用获取到的Location 值发送新的Request。资源服务器验证后即返回cookies。爬虫使用此cookies 即可拥有资源服务器访问权限,使用Python 的requests 库作为爬虫工具时,会自动储存cookies。

ids.post (url =url,data =data,headers =headers,al⁃low_redirects=False)#登录授权服务器,禁止301跳转

k =ids.get (url =jw_url,headers =headers2,al⁃low_redirects=False)

jw_location =k.headers["Location"]#获取教务系#统的location

jw.get(url=jw_location,headers=headers3)#登#录教务系统

实验结果表明:本程序完美实现网络爬虫的模拟OAthou2.0授权登录,解决爬虫获取数据时需要通过OAuth2.0授权来获取页面访问权限的问题。

4结语

以爬虫模拟OAuth2.0登录来教务系统,通过实际

例子来研究解决主题爬虫模拟登录时候所遇到的问题,让爬虫可以抓取到自己所需要的信息。通过此方法爬虫登录还可以登录其他需要通过OAuth2.0授权登录的网站。在此基础上,还可以采取Redis 存放Cookies 的方法,来解决爬取需要信息的过程中需要多次登录的问题,极大地减少了授权服务器的压力以及爬虫获取所需信息的时间,也避免多次登录造成账号或IP 被封禁的问题。

参考文献

[1]刘理,刘宏宇,戴鸿鹏,刘欣贺.4G 网络时代大数

据的机遇与挑战[J].通讯世界,2017,(21):

63-64.

[2]杨金文.单点登录系统的研究与实现[D].辽宁工

业大学,2017.

[3]魏成坤,刘向东,石兆军.基于OAuth2.0的认证

授权技术研究[J].信息网络安全,2016,(09):

6-11.

图2第一次登录提交表单信息(chrome 调试工具

)

图3第二次登录提交表单信息(chrome 调试工具

)45

相关文档
最新文档