赵走x博客
首页
书籍
软件
工具
古诗词
搜索
登录
精通Scrapy爬虫:25、Scrapy模拟登录
精通Scrapy爬虫:24、登录实质
精通Scrapy爬虫:23、项目实战:下载360图片
精通Scrapy爬虫:22、项目实战:爬取matplotlib例子源码文件
精通Scrapy爬虫:21、下载文件和图片:FilesPipeline和ImagesPipeline
精通Scrapy爬虫:20、项目练习
精通Scrapy爬虫:16、使用LinkExtractor提取链接
精通Scrapy爬虫:19、Exporter添加导出数据格式
精通Scrapy爬虫:18、使用Exporter导出数据
精通Scrapy爬虫:17、LinkExtractor描述提取规则
精通Scrapy爬虫:15、将数据存入MongoDB
精通Scrapy爬虫:14、过滤重复数据
精通Scrapy爬虫:13、Item Pipeline
精通Scrapy爬虫:12、Field元数据
精通Scrapy爬虫:11、Item和Field
精通Scrapy爬虫:10、CSS选择器
精通Scrapy爬虫:9、XPath
精通Scrapy爬虫:8、Response内置Selector
精通Scrapy爬虫:7、Selector对象
精通Scrapy爬虫:6、Spider开发流程
精通Scrapy爬虫:5、Request和Response对象
精通Scrapy爬虫:4、Scrapy框架结构及工作原理
精通Scrapy爬虫:3、编写第一个Scrapy爬虫
精通Scrapy爬虫:2、Scrapy简介及安装
精通Scrapy爬虫:1、网络爬虫是什么
精通Scrapy爬虫:24、登录实质
资源编号:75954
精通Scrapy
爬虫
热度:35
目前,大部分网站都具有用户登录功能,其中某些网站只有在用户登录后才能获得有价值的信息,在爬取这类网站时,Scrapy爬虫程序需要先模拟用户登录,再爬取内容,这一章来学习在Scrapy中模拟登录的方法。
在学习模拟登录前,应先对网站登录的原理有所了解,我们在Chrome浏览器中跟踪一次实际的登录操作,观察浏览器与网站服务器是如何交互的。以登录http://example.webscraping.com 网站为例进行演示,这是一个专门用于练习爬虫技术的网站,图10-1所示为该网站的登录页面。 ![bs64](https://img.handsomemark.com/2019/10/19/28b8d612-f267-11e9-960f-acde48001122.png) 图10-1 页面中的表单对应于HTML中的`
`元素,当填写完表单,单击“提交”按钮时,浏览器会根据`
`元素的内容发送一个HTTP请求给服务器,其中: ● `
`的method属性决定了HTTP请求的方法(本例中为POST)。 ● `
`的action属性决定了HTTP请求的url(本例中为#,也就是当前页面的url)。 ● `
`的enctype属性决定了表单数据的编码类型(本例中为x-www-urlencoded)。 ● `
`中的`
`元素决定了表单数据的内容。 再来看`
`中的`
`元素: ● name属性为'email'和'password'的两个`
`,对应于账号和密码输入框,它们的值待用户填写。 ● 在`
`中还包含了3个隐藏的`
`,它们的值在value属性中,虽然值不需要用户填写,但提交的表单数据中缺少它们可能会导致登录验证失败,这些隐藏的`
`有其他一些用途,比如: `
`用来告诉服务器,登录成功后页面跳转的地址。 `
`用来防止CSRF跨域攻击,相关内容请查阅资料。 接下来,填入账号密码,在Chrome开发者工具中观察单击LogIn按钮后浏览器发送的HTTP请求,如图10-2所示。 ![bs64](https://img.handsomemark.com/2019/10/20/24b60496-f329-11e9-991c-acde48001122.png) 图10-2 从图10-2中可以看出,我们捕获到了很多HTTP请求,其中第一个就是发送登录表单的POST请求,查看该HTTP请求,可以找到请求url、请求方法(method)、请求头部(headers)、表单数据(form data)等信息,其中我们最关心的是表单数据,如图10-3所示。 ![bs64](https://img.handsomemark.com/2019/10/20/2fffac08-f329-11e9-991c-acde48001122.png) 图10-3 表单数据由多个键值对构成,每个键值对对应一个`
`元素,其中的键是`
`的name属性,值是`
`的value属性(用户填写的内容会成为`
`的value)。需要注意的是,图10-3中显示的并不是实际的POST正文(content),这样的显示方式只是为了方便用户查看。单击view source按钮,可以看到实际的POST正文,如图10-4所示。 ![bs64](https://img.handsomemark.com/2019/10/20/3d26481a-f329-11e9-991c-acde48001122.png) 图10-4 分析过HTTP请求信息后,再来看HTTP响应信息,如图10-5所示。 ![bs64](https://img.handsomemark.com/2019/10/20/5df41fae-f329-11e9-991c-acde48001122.png) 图10-5 响应头部中长长的Set-Cookie字段就是网站服务器程序保存在客户端(浏览器)的Cookie信息,其中包含标识用户身份的session信息,之后对该网站发送的其他HTTP请求都会带上这个“身份证”(session信息),服务器程序通过这个“身份证”识别出发送请求的用户,从而决定响应怎样的页面。另外,响应的状态码是303,它代表页面重定向,浏览器会读取响应头部中的Location字段,依据其中描述的路径(本例中为/)再次发送一个GET请求,图10-6所示为这个GET请求的信息。 ![bs64](https://img.handsomemark.com/2019/10/20/7027bf6e-f329-11e9-991c-acde48001122.png) 图10-6 观察请求头部中的Cookie字段,它携带了之前POST请求获取的Cookie信息,最终浏览器用该请求响应的HTML文档刷新了页面,在页面右上角可以看到Welcome Liu的字样,表明这是登录成功后的页面。