scrapy middlewares.py中间件使用

scrapy的下载器中间件位于调度器和下载器之间,可用于给请求头中添加user-agent等应用
在middleware.py文件中添加中间件类

1. 自建中间件类:用于fake_useragent生成随机代理

from fake_useragent import UserAgent

#自建随机生成User-Agent的类
#任何一个被下载器中间件拦截的request,都得在这里执行随机生成user-agent,并赋值给headers中的参数User-Agent
class XxxxmiddleRandomUaMiddleware(object):
	#形参request即为请求对象
	def process_request(self,request,spider):
		agent = UserAgent().random
		#给请求对象request的headers属性(他是一个字典)的键:User-Agent赋值,就实现了user-agent的反爬
		request.headers['User-Agent'] = agent

2. 自建中间件类:使用ip代理池

先在middlewares.py文件同级目录下新建proxies.py文件,存放User-Agent代理池

proxy_list = [
	'http://'
	'http://...'
	'http://...'
	...
	]

middlewares.py中

import random
from .proxies import proxy_list

class BaidumiddleRandomProxyMiddleware(object):
	def process_request(self,request,spider):
		proxy = random.choice(proxy_list)
		request.meta['proxy'] = proxy	
	
	#使用process_exception()处理异常
	#有些proxy经常不能用了,需要处理异常:处理的方式是再让他选代理
	def process_exception(self,request,exception,spider):
		#将request请求对象再次交给中间件,继续找proxy,一直找到能用的proxy
		return request		

3. 自建中间件类,添加cookies

class BaiduCookieMiddleware(object):
	def process_request(self,request,spider):
		cookies = self.get_cookies()
		#Request()中所有参数都是请求对象request的属性
		request.cookies = cookies

	#把cookie处理成字典
	def get_cookies(self):
		cookie = '...'	#你的cookie(从前端ctrl+shift+i中获取)
		cookies = {}
		c_list = cookie.split(';')
		for c in c_lsit:
			cookies[c.split('=')[0]] = c.split('=')[1]
		return cookies

settings.py中配置中间件

#将随机赋值user-agent的中间件添加上
DOWNLOADER_MIDDLEWARES = {	
	'Xxxxmiddle.middlewares.XxxxmiddleDownloaderMiddleware':500,
	'Xxxxmiddle.middlewares.XxxxmiddleRandomUaMiddleware':200,
	'Xxxxmiddle.middleware.XxxxmiddleRandomProxyMiddleware':249,
	'Xxxxmiddle.middleware.XxxxCookieMiddleware':199
	}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值