投稿    登录
欢迎来访~

小白进阶之Scrapy第二篇(登录篇)

Python 哎哟卧槽 51879浏览 129评论

扫码或搜索:进击的Coder

发送

即可立即永久解锁本站全部文章

(^o^)/ 第一部分完工、开始第二部分的工作吧!登!录!

QQ图片20161022193315

毕竟这些都不是我们要的重点!我们要的是资源 资源啊!能下载东西的地方!如果不是为了资源 那么爬虫将毫无意义(给工钱的另算)。

但是下载资源是隐藏的,需要登录才能看见(别找我要帐号、我也是借的别人的。)

我们先来看看这个网站是怎么登录的,使用Firefox打开www.haoduofuli.wang/login.php(为啥是Firefox、因为个人感觉Firefox的表单界面看起来很爽啊!哈哈哈)

打开页面之后开启调试模式(怎么开不说了)–开启持续日志(不然跳转之后没了)

QQ截图20170122101749

然后选择网络–选中html和XHR(这样页面类容就会少很多、又不会缺少我们需要的东西)

QQ截图20170122103140

现在开始登录(顺手把记住登录也勾上)!调试窗口不要关啊!!!!登录完毕之后你会发现出现一些内容 我们找到其中方法为post的请求、然后选择 参数 就能看到我们需要的登录表单啦!

QQ截图20170122104241

我划掉的是帐号密码、这个位置应该显示你的帐号密码(这是很简单的一个登录表单、不通用但是思路是一样的。)找到了我们想要的东西我们开始登录吧

首先要知道Scrapy登录是如何实现的? 借助于FromRequests这个包实现的(前面已经导入过了),下面开整。不需要太大的改动只需增加一些函数 就可以轻而易举的实现的登录。

将我们的start_urls中的地址换掉换成我们我们的登陆地址www.haoduofuli.wang/login.php变成这样:

那么问题来了!参考上面的流程图你会发现、这丫的没法登录表单没法写啊!start_urls返回的responses就直接给rules进行处理了诶!我们需要一个什么方法来截断start_urls返回的responses 方便我们把登录的表单提交上去!那么问题来了 !该用啥?

答案是:parse_start_url(response)这方法;此方法作用是当start_url返回responses时调用这个方法。官方解释如下:

QQ截图20170122105258

然后呢?当然是构造表单并通过FormRequests提交了!所以我们的程序现在就应该变成这样子了:

最后一句的意思是提交表单formdate并将回调after_login函数处理后续内容(一般用来判断是否登录成功)

然后开始请求我们需要爬取的页面 现在就变成这样了!

return Request(lnk)就表示我们的开始页面了

至于为啥多了一个try判断;完全是因为 这站长不守规矩啊!有些页面不一样·····我能怎么办 我也很无奈啊! 都是被逼的。囧

好了!Spider写完啦!但是我们的工作还没完!!!网站是靠什么知道这个request是否是登录用户发出的?答案是 Cookie!

所以我们需要 下载器 在下载网页之前在request中加入Cookie来向网站证明我们是登录用户身份;才能获取到需要登录才能查看的信息!

这个该怎么做?现在Scrapy的中间件派上用场了!

关于Cookie中间件参考:http://scrapy-chs.readthedocs.io/zh_CN/latest/topics/downloader-middleware.html#module-scrapy.contrib.downloadermiddleware.cookies

我们需要做的就是在settings.py中的  DOWNLOADER_MIDDLEWARES  开启这个中间件:scrapy.downloadermiddlewares.cookies.CookiesMiddleware

请注意!!!!!!

每一个中间件会对request进行操作、你所做的操作可能会依赖于前一个中间件、所以每个中间件的顺序就异常的重要。具体该设置多少请参考:

http://scrapy-chs.readthedocs.io/zh_CN/latest/topics/settings.html#std:setting-DOWNLOADER_MIDDLEWARES_BASE

QQ截图20170122165743

中的值设置!!这点务必注意···如果不清楚依赖关系 请按照上图的值设置。

从上面可以看出Cookie中间件的值为700 、我们在settings.py设置也应该为700

QQ截图20170122170041

我注释掉的请无视掉!!!

做好这些以后Scrapy运作的整个流程大概就变成了下面这样:

QQ20170122-232839

QQ20170122-230207

跑一下!效果杠杠滴!!!至于后面的数据持久化(如何保存数据、大家请自行解决哦!比毕竟上一篇博文讲过了、)

这种更适合使用MongoDB存储 超级简单好使。

至此本篇博文结束。

这个还有一个分布式的版本、现在不想写了··· 等年后再写吧。

 

另外我真的一个资源都没看。另外我真的一个资源都没看。另外我真的一个资源都没看。另外我真的一个资源都没看。另外我真的一个资源都没看。另外我真的一个资源都没看。另外我真的一个资源都没看。另外我真的一个资源都没看。另外我真的一个资源都没看。另外我真的一个资源都没看。另外我真的一个资源都没看。另外我真的一个资源都没看。另外我真的一个资源都没看。另外我真的一个资源都没看。另外我真的一个资源都没看。另外我真的一个资源都没看。另外我真的一个资源都没看。另外我真的一个资源都没看。另外我真的一个资源都没看。另外我真的一个资源都没看。另外我真的一个资源都没看。另外我真的一个资源都没看。

 

 

转载请注明:静觅 » 小白进阶之Scrapy第二篇(登录篇)

更多文章、联系博主、技术交流、商务合作

扫码或搜索:进击的Coder

进击的Coder

微信公众号 扫一扫关注

喜欢 (47)or分享 (0)

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请狠狠点击下面的

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址