您的当前位置:首页正文

Scrapy框架之如何给你的请求添加代理

来源:华拓网

最近在学习Scrapy爬虫框架,试着添加代理ip,做了一丢丢总结,欢迎指正。

      首先做好准备工作,创建一个Scrapy项目,目录结构如下:

       注:spiders目录下多了3个文件,db.py,default.init和items.json。db.py是我简单封装的一个数据库访问的lib文件,default.init是我的数据库和代理相关的配置文件,items.json是最后的输出文件。

      给请求添加代理有2种方式,第一种是重写你的爬虫类的start_request方法,第二种是添加download中间件。下面会分别介绍这2种方式。

重写start_request方法

      我在我的爬虫类中重写了start_requests方法:

       它会给你报一个407的错误(在可为此请求提供服务之前,您必须验证此代理服务器。请登录到代理服务器,然后重试)。正确的做法是将验证消息加到header的Proxy-Authorization中:

       红色的部分填用户名和密码,这样就解决了,这里也看到了请求的header信息也是在这里添加的~

使用DOWNLOAD中间件

       在middlewares.py中增加一个类,取名:ProxyMiddleware即代理中间件:

        这里的初始化方法可以忽略,是我业务上的需求,主要是看这里的process_request方法,加了一个代理,然后在settings中配置这个中间件:

       这里的数字是中间件的一个唯一编号,可以随意指定,只要不重复就行。然后同样在控制台中启动爬虫,没有问题~,同样的,对于Basic认证的代理ip同样可以在这里设置,header通过process_request的request方法取到。

       ps: 第一次用简书写文章,发现简书的文章编辑不好用,要是可以直接让我用Markdown写就好了~