本文分为两部分:
一、HTTP代理的逻辑
做过python爬虫的都知道,HTTP代理的设置时要在发送请求前设置好,那HTTP代理的逻辑点在哪里呢?实际上,只需要在Scrapy 的项目结构中添加就好,具体代码如下:
# Scrapy 内置的 Downloader Middleware 为 Scrapy 供了基础的功能,
# 定义一个类,其中(object)可以不写,效果一样
class SimpleProxyMiddleware(object):
# 声明一个数组
proxyList = ['你购买的HTTP代理地址']
# Downloader Middleware的核心方法,只有实现了其中一个或多个方法才算自定义了一个Downloader Middleware def process_request(self, request, spider):
# 随机从其中选择一个,并去除左右两边空格
proxy = random.choice(self.proxyList).strip()
# 打印结果出来观察
print("this is request ip:" + proxy)
# 设置request的proxy属性的内容为代理ip
request.meta['proxy'] = proxy
# Downloader Middleware的核心方法,只有实现了其中一个或多个方法才算自定义了一个Downloader Middleware def process_response(self, request, response, spider):
# 请求失败不等于200
if response.status != 200:
# 重新选择一个代理ip
proxy = random.choice(self.proxyList).strip()
print("this is response ip:" + proxy)
# 设置新的代理ip内容
request.mete['proxy'] = proxy
return request
return response
每个 Downloader Middleware 定义了一个或多个方法的类,核心的方法有如下三个:
1.process_request(request, spider)
2.process_response(request,response, spider)
3.process_exception(request, exception, spider)
找到 setting.py 文件中的这块区域:
#DDWNLQADER_MIDDLEWARES = {
# *images.middlewares.ImagesDownloaderMiddleware": 543,
# *images middlewares,LocalProxyMiddleware*: 100