在调试爬虫的时候,新手都会遇到关于ip的错误,好好的程序突然报错了,怎么解决,关于ip访问的错误其实很好解决,但是怎么知道解决好了呢?怎么确定是代理ip的问题呢?由于笔者主修语言是Java,所以有些解释可能和Python大佬们的解释不一样,因为我是从Java 的角度看Python。这样也便于Java开发人员阅读理解。
代理ip的逻辑在哪里
一个scrapy 的项目结构是这样的
scrapydownloadertest # 项目文件夹
│ items.py # 定义爬取结果存储的数据结构
│ middlewares.py # 中间件(可以理解java的过滤器拦截器)
│ pipelines.py # 数据管道,对获取到的数据做操作
│ settings.py # 项目的配置文件
│ __init__.py # 初始化逻辑
│
├─spiders # 放置 Spiders 的文件夹
│ │ httpProxyIp.py # 爬取到结果后的处理类
│ │ __init__.py # spider初始化逻辑
scrapy.py
从上图可以发现,代理ip的设置肯定是在发送请求之前就要设置好,那么唯一符合条件的地方就是middlewares.py
,所以关于代理的相关逻辑都写在这个里面。直接在其中添加如下代码:
# Scrapy 内置的 Downloader Middleware 为 Scrapy 供了基础的功能,
# 定义一个类,其中(object)可以不写,效果一样
class SimpleProxyMiddleware(object):
# 声明一个数组
proxyList = ['http://218.75.158.153:3128','http://188.226.141.61:8080']
# Downloader Middleware的核心方法,只有实现了其中一个或多个方法才算自定义了