摘要:介绍了使用Scrapy登录简单网站的流程,不涉及验证码破解

简单登录

很多时候,你都会发现你需要爬取数据的网站都有一个登录机制,大多数情况下,都要求你输入正确的用户名和密码。现在就模拟这种情况,在浏览器打开网页:http://127.0.0.1:9312/dynamic,首先打开调试器,然后点击Elements标签,查看登录表单的源代码

再点击Network标签,然后在用户名框里输入user,在密码框里输入pass,再点击login按钮

点击调试器里的login页面,观察下面的情况

点击调试器里的gated页面,观察下面的情况

HTTP的cookie是由服务器发送给浏览器,由一些文本和数字组成的字符串,之后浏览器访问服务器的任何请求里都会带着这个cookie来标识你的身份和session,从而能够让你修改在这个网站上的个人信息。

总的来说,一个登录操作会包含几个从浏览器到服务器的往返操作,而Scrapy会自动处理这些操作。

login.py的源代码地址:

https://github.com/Kylinlin/scrapybook/blob/master/ch05%2Fproperties%2Fproperties%2Fspiders%2Flogin.py

继续在上面的名为easy的spider上扩展代码,首先将easy.py复制为login.py,然后做以下修改:

  • 将spider的名称修改为login

  • 这里会使用FormRequest类来登录,这个类与之前的Request类很相似,只是带有额外的formdata参数用来传送登录的表单信息(用户名和密码),为了使用这个类,需要使用以下语句导入:from scrapy.http import FormRequest

  • 然后用startrequests()函数来代替starturls语句,这样做的原因是我们需要定制更多的参数,最后的函数是这样的

# Start with a login request
def start_requests(self):
return [FormRequest("http://web:9312/dynamic/login",formdata={"user": "user", "pass": "pass"}
#formdata字典里的key名就是第一张图中用红线标注的input标签中的name值)]

就这么简单,Scrapy会自动为我们处理cookie,只要我们登录成功了,它就会像一个浏览器一样自动传送cookie.

现在运行这个spider:scrapy crawl login

可以看到上面红线处首先向login页面提交了一个POST请求,然后重定向到了gated页面,再用一个GET请求得到了该页面,如果用错了用户名和密码,就会得到错误的结果

上面是一个极其简单的登录机制,大多数网站其实会使用更加复杂的登录机制,下面的这个例子就使用了隐藏数据

带有隐藏数据的登录

在浏览器打开页面:http://127.0.0.1:9312/dynamic/nonce,然后用调试器定位到登录按钮,可以看到如下界面

与第一个登录情况不同的是可以看到这个表单有一个叫做nonce的隐藏字段,当你按下Login按钮时,向服务器发送的数据包括用户名和密码,还有这个属性的值。你不可能猜到这个属性的值,因为这是一个一次性的随机数,这意味着你在Scrapy登录时需要两个发送两个请求,首先得到表单里的数据,然后再填充登录数据,Scrapy已经集成了这些功能。

noncelogin.py文件的源代码地址:

https://github.com/Kylinlin/scrapybook/blob/master/ch05%2Fproperties%2Fproperties%2Fspiders%2Fnoncelogin.py

将之前的login.py文件复制为noncelogin.py文件,做如下改变:

  • 导入Request:from scrapy.http import Request

  • 将spider的名称修改为noncelogin

  • 将start_request函数修改如下

#这个函数返回了一个Request,在这个Request中已经指定了回调函数为parse_welcome,所以会把response传送到parse_welcome函数上
def start_requests(self):
return [Request("http://web:9312/dynamic/nonce",callback=self.parse_welcome)]

  • 增加一个parse_welcome函数如下
#接收到了包含表单全部数据的response(此时用户名和密码都是空,但是已经获取到了隐藏字段nonce的值),然后填充用户名和密码再登录
def parse_welcome(self, response):
return FormRequest.from_response(response,formdata={"user": "user", "pass": "pass"})

运行该spider:scrapy crawl noncelogin

之前所说的登录过程发送了两个请求指的就是上面标记了顺序1和2的两个请求(一个GET,一个POST)

值得注意的是form_response函数

(http://doc.scrapy.org/en/1.0/topics/request-response.html#topics-request-response-ref-request-userlogin),这个函数值得仔细研究,如果在登录页面有多个表单,此时就要用参数来指定究竟把用户名和密码填充到哪个表单上,同时,函数也默认模拟了对登录按钮的点击行为,要是网站使用了javascript来控制登录,此时函数的默认点击行为就可能出错,通过设置dont_click为True来禁止模拟点击.

上面只是使用了两个步骤来登录,但在面对更加复杂的登录方式时就需要组织更多的步骤.

转载于:https://www.cnblogs.com/kylinlin/p/5394463.html

Learning Scrapy笔记(五)- Scrapy登录网站相关推荐

  1. Learning Scrapy笔记(零) - 前言

    我已经使用了scrapy有半年之多,但是却一直都感觉没有入门,网上关于scrapy的文章简直少得可怜,而官网上的文档(http://doc.scrapy.org/en/1.0/index.html)对 ...

  2. scrapy爬取知名问答网站(解决登录+保存cookies值+爬取问答数据)--完整版完美解决登录问题

    菜鸟写Python:scrapy爬取知名问答网站 实战(3) 一.文章开始: 可能看到这篇文章的朋友,大多数都是受慕课网bobby讲师课程的影响,本人也有幸在朋友处了解过这个项目,但是似乎他代码中登录 ...

  3. 【爬虫笔记】Scrapy爬虫技术文章网站

    文章目录 一.Xpath 1.xpath简介 2.xpath语法 二.CSS选择器 三.爬取伯乐在线--初级 1.创建Scrapy项目 2.编写item.py文件 3.编写spider文件 4.编写p ...

  4. Python 网络爬虫笔记10 -- Scrapy 使用入门

    Python 网络爬虫笔记10 – Scrapy 使用入门 Python 网络爬虫系列笔记是笔者在学习嵩天老师的<Python网络爬虫与信息提取>课程及笔者实践网络爬虫的笔记. 课程链接: ...

  5. Scrapy:学习笔记(2)——Scrapy项目

    Scrapy:学习笔记(2)--Scrapy项目 1.创建项目 创建一个Scrapy项目,并将其命名为"demo" scrapy startproject demo cd demo ...

  6. 爬虫基础(五)-----scrapy框架简介

    ---------------------------------------------------摆脱穷人思维 <五> :拓展自己的视野,适当做一些眼前''无用''的事情,防止进入只关 ...

  7. Scrapy + Selenium 实现模拟登录,获取页面动态加载数据

    本文是模拟登录某八同城招聘网站,然后获取一个招聘信息页面中的浏览人数. 直接上代码! 1. Scrapy 爬虫文件 import scrapyclass TestSpider(scrapy.Spide ...

  8. Python的Scrapy框架爬取诗词网站爱情诗送给女友

    文章目录 前言 效果展示: 一.安装scrapy库 二.创建scrapy项目 三.新建爬虫文件scmg_spider.py 四.配置settings.py文件 五.定义数据容器,修改item.py文件 ...

  9. 爬虫Scrapy笔记

    爬虫虫案例使用网址:Scrape Center 1. Scrapy框架 pip install scrapy pip install pypiwin32 提高效率 用scrapy创建爬虫文件. Scr ...

  10. scrapy笔记——python的时间转换

    1 import datetime 2 GMT_FORMAT = '%M %H %d %m %w' 3 datetime.datetime.utcnow().strftime(GMT_FORMAT) ...

最新文章

  1. JS下计算当前日期(当天)后N天出现NAN或者undefined的情况
  2. 山果(转载《人民日报》)
  3. 在emu8086中学习汇编语言加减法程序
  4. dbeaver导出表结构和数据_Oracle 导入导出表空间跟数据表通用操作笔记
  5. 19、Power Query-快速分析各产品的销售情况
  6. 如何在JMeter中执行客户端Web性能测试?
  7. 作者:孙卫强,博士,上海交通大学教授、博士生导师。
  8. 【Oracle】搭建DataGuard
  9. python用generator打印杨辉三角_python写generator输出杨辉三角遇到问题,望高手解答!...
  10. Spring依赖注入的三种方式
  11. biopython简介
  12. java加载mysql驱动_Java 加载数据库驱动(JDBC)
  13. 腰部按摩操有两种做法
  14. GBASE 8s UDR内存管理_01_mi_alloc
  15. 刻录cd(不同系统的方式)
  16. H5头像完整制作,可拖拽缩放,可添加装饰图标(装饰图标支持缩放、旋转、拖拽)
  17. java ogv格式_COMSOL Multiphysics
  18. 计算机信息技术在生活中的应用实例,电子信息技术在生活中的应用与发展
  19. kafka请求队列模块
  20. BP商业计划书应该怎样撰写?

热门文章

  1. pytorch 回归预测(时间序列)
  2. MySQL Control Flow Functions(控制流)
  3. idea tomcat配置
  4. opencv 像素操作
  5. 数据可视化之单属性(字段)
  6. 一步步实现SDDC-双节点VSAN部署
  7. 分布式SQL学习总结(2)——TiDB 的现在和未来
  8. Linux学习总结(55)——Linux 运维常用脚本
  9. Linux学习总结(23)——SSH协议详解
  10. Java基础学习总结(38)——Lombok(消除冗长的 java 代码)的使用和原理及安装、入门使用