scrapy入门教程4:代理模块(1)

1686 查看

0. 基本环境说明

  1. 本文截图及运行环境均在Win7上实现(没错,我有折腾回来了,MAC上面的兄弟就照葫芦画瓢吧~)

  2. scrapy版本为1.0.3

  3. 参考文献以及下载链接:

  4. 请按顺序阅读本教程

0.1前言

教程已经三个月没有更新了,原因是老板接了一个中兴的大数据项目,我被拉过去负责这个项目了,有兴致回来再来一发Spark教程吧~,最近终于有时间接着稍微写一些了,我一定要将写博客这个活动坚持下去,不论断了多少次我都会续上的~,本来准备写一些分布式爬虫的内容,但是还在调试阶段,等搞完之后一起写出来,咩哈哈~

本篇内容主要是教各位怎么初期配置一下scrapy的代理,其实后续有很多很麻烦的事情(比如如何构建代理池、如何获取大量代理、如何测试代理可用性等)。有空我会慢慢写的~(我需要读者的支持啊~粉我一下吧,不粉的话推荐一下也行啊~大家都不容易是吧~)

1. 简述

在scrapy中专门有一个模块Downloader Middleware来实现scrapy爬虫中请求和相应的某些通用功能,比如我们这次要用到的代理功能,就是通过其子模块HttpProxyMiddleware来实现的,至于Downloader Middleware的其他子模块,我以后有空会一一介绍的,现在大家只要知道这个模块的基本含义就行了。

2.代理配置

2.1 创建代理模块

首先我们现在njupt目录下面新建一个名称为middlewares.py的文件,文件内容如下:

import base64
  

class ProxyMiddleware(object):
    def process_request(self, request, spider):
        request.meta['proxy'] = "http://IP地址:端口号"
        
        proxy_user_pass = "用户名:帐号"
        encoded_user_pass = base64.encodestring(proxy_user_pass)
        request.headers['Proxy-Authorization'] = 'Basic ' + encoded_user_pass

其中

  1. process_request这个方法是自带的,是在每个请求之前都会自动执行一下,借此来修改参数

  2. request.meta['proxy']直接通过这个属性直接设置代理,填的是IP地址和端口号,如http://218.200.66.196:8080,一般你搞来的代理都会有着两个东西,直接填上去就好~

  3. 如果你搞来的代理还需要账号和密码的话,我们就需要给proxy_user_pass赋值,形如root:12345

  4. 为了让你的代理帐号密码能良好运行,我们还需要base64.encodestring这个函数来帮一下忙,对你的代理帐号密码进行编码。

  5. 最后将编码过后的函数赋值给http头中的Proxy-Authorization参数即可。
    注意:以上3~5步,如果代理没有帐号密码的话就不要折腾了。

建立完毕之后文件目录结构如下:

|---- njupt
| |---- njupt
|   |---- __init__.py
|   |---- items.py        #用来存储爬下来的数据结构(字典形式)
|   |---- middlewares.py  #用来配置代理
|    |---- pipelines.py    #用来对爬出来的item进行后续处理,如存入数据库等
|    |---- settings.py    #爬虫配置文件
|    |---- spiders        #此目录用来存放创建的新爬虫文件(爬虫主体)
|     |---- __init__.py
| |---- scrapy.cfg        #项目配置文件

2.2 修改配置文件

代理文件创建完毕之后,需要修改配置文件settings.py,并在添加如下内容:

DOWNLOADER_MIDDLEWARES = {
    'njupt.middlewares.ProxyMiddleware': 100,
}

嘛,就是添加一下大的配置模块Downloader Middleware,外加配置一个子模块HttpProxyMiddleware嘛~

2.3 结果测试

其实这个配置代理重点之一就是测试环节了,我这里给各位提供一种测试思路直接请求查看自身IP以及区域的网站即可,如(http://ip.filefab.com/),根据其返回的结果(图2-1与图2-2所示)来判断是否成功。

图2-1 生成的文件

图2-2 代理的具体信息

具体测试代码可参考基本说明中的附件代码。咱们下期见~