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

0. 基本环境说明

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

  2. scrapy版本为1.0.3数据结构

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

  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 代理的具体信息

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

相关文章
相关标签/搜索