Scrapy 如何抓取需要登录后才能访问的数据
  BY1EvMhY1VNb 2023年11月02日 45 0

Cookie,引用百度百科的定义“是某些网站为了辨别用户身份,进行Session跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息”。网站就是判断一个请求里带的cookie是否有效,来判断客户请求是否已登录过,来避免每次访问一个新的网页,都要求重新登录(这样就反人类了)。
Scrapy 如何抓取需要登录后才能访问的数据_数据
如上图所示,客户端的cookie是网站验证你的登录请求成功后,在应答的Set-Cookie域里面设置,客户端收到后会记录在本地,并在后续的请求中带上。
Scrapy 如何抓取需要登录后才能访问的数据_python_02
所以,要实现模拟登录抓取数据,有两个思路。一是我们的程序就要模拟上面流程图的第3步和第4步,获取一个有效的cookie。二是先通过浏览器登录网址获取到cookie,再复制到我们的抓取脚本中。这两个方式各有优劣,第一种办法很简单就不解释了,下面我们来看下第二种办法。

这是最正统的方法,脚本完成后可以自动化运行,也不用担心cookie过期等问题。但是就是技术门槛比较高,特别是带验证码(特别是一些复杂验证码,如滑动拼图,选择图片等)的登录,非常难以实现。还有的在客户端发包时就会对密码进行加密(不依赖https),这样就成为更难逾越的鸿沟。

我们以pjob为例(因为它比较简单),来介绍下scrapy框架如何实现登录。
首先是尝试登录pjon,利用F12开发者工具查看请求送的字段。

Scrapy 如何抓取需要登录后才能访问的数据_https_03
下面我们开始编码,编码思路就是首先访问pjob登录界面,再模拟发送登录验证POST请求,登录成功后,再访问账户个人订单界面(带上登录返回的cookie信息),验证cookie有效性。Scrapy项目的生成以及常规前置工作在前面几篇文章已详细说明,这里不再赘述
Scrapy 如何抓取需要登录后才能访问的数据_客户端_04
如上图所示,我们使用了FormRequest构造了一个POST请求,请求字段就是我们在浏览器看到的。这里注意要定义一个特殊的meta元素cookiejar,meta是用于在请求应答中传递数据的字典,针对cookiejar这个特色键,scrapy会自动赋登录返回的cookie值,现在的初始值无所谓,我们填0
Scrapy 如何抓取需要登录后才能访问的数据_客户端_05
如上图所示,登录后我们用一个GET请求访问个人订单页,这里就用上了meta里的cookiejar的值,在新的请求包里带上了应答的cookie。Scrapy运行输出如下:
Scrapy 如何抓取需要登录后才能访问的数据_https_06
抓取回来了我的个人数据。


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  Fo7woytj0C0D   2023年12月23日   18   0   0 pythonsedidepythonidesed
BY1EvMhY1VNb
最新推荐 更多