0. 基本环境说明
本文截图及运行环境均在Win7上实现(没错,我有折腾回来了,MAC上面的兄弟就照葫芦画瓢吧~)
scrapy版本为1.0.3
-
参考文献以及下载链接:
请按顺序阅读本教程
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
其中
process_request
这个方法是自带的,是在每个请求之前都会自动执行一下,借此来修改参数request.meta['proxy']
直接通过这个属性直接设置代理,填的是IP地址和端口号,如http://218.200.66.196:8080
,一般你搞来的代理都会有着两个东西,直接填上去就好~如果你搞来的代理还需要账号和密码的话,我们就需要给
proxy_user_pass
赋值,形如root:12345
。为了让你的代理帐号密码能良好运行,我们还需要
base64.encodestring
这个函数来帮一下忙,对你的代理帐号密码进行编码。最后将编码过后的函数赋值给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 代理的具体信息
具体测试代码可参考基本说明中的附件代码。咱们下期见~
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。