Scrapy的中间件(Middleware)反爬虫设置

知乎登录逻辑

1.创建spider脚本:

使用命令以base为模版创建一个spider文件

>>>scrapy genspider zhihu www.zhihu.com

2.重写start_requests:

start_requests方法是spider处理start_urls的入口,即处理start_urls的第一个方法,我们让他访问页面,并回调到下一个函数login处理登录过程:

《Scrapy的中间件(Middleware)反爬虫设置》 重写start_requests

3.处理登录过程:

在方法start_requests的回调方法login中,使用FormRequest类传入参数模拟浏览器的POST访问:

《Scrapy的中间件(Middleware)反爬虫设置》 处理登录过程

当然我们也可以给login添加一个回调方法用于验证登录是否成功:

《Scrapy的中间件(Middleware)反爬虫设置》 回调验证

当然,我们不要忘了重写start_requests后,他最终处理URL的执行结果必须和源码保持一致

《Scrapy的中间件(Middleware)反爬虫设置》 start_url的源码
《Scrapy的中间件(Middleware)反爬虫设置》 回归一致

当然,查看make_requests_from_url方法的源码后,我们发现也可以这样重写最后一步

《Scrapy的中间件(Middleware)反爬虫设置》 make_requests_from_url方法的源码

重写check_login,这样写就可以给Request添加一些参数,例如headers

《Scrapy的中间件(Middleware)反爬虫设置》 start_request出口的另一种写法

配置DOWNLOADER_MIDDLEWARES

打开settings.py,找到已被注释掉的downloader_middlewares:

《Scrapy的中间件(Middleware)反爬虫设置》 downloader_middlewares

设置User-Agent:

使用scrapy的downloader_middlewares自带的组件可以完成配置,源码如下:

《Scrapy的中间件(Middleware)反爬虫设置》 downloader_middlewares

源码的方法会将每一个爬虫的user-agent值替换成settings.py中设置的USER_AGENT值,我们打开settings.py并添加USER_AGENT值,然后将对应的类权限先设为None,然后重写它。

《Scrapy的中间件(Middleware)反爬虫设置》 settings.py

之后,我们在middlewares中创建一个类:

《Scrapy的中间件(Middleware)反爬虫设置》

    原文作者:眼君
    原文地址: https://www.jianshu.com/p/2346cc1602b8
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞