当前位置:   article > 正文

scrapy middlewares.py中间件使用

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

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

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

proxy_list = [
	'http://'
	'http://...'
	'http://...'
	...
	]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

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		
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

settings.py中配置中间件

#将随机赋值user-agent的中间件添加上
DOWNLOADER_MIDDLEWARES = {	
	'Xxxxmiddle.middlewares.XxxxmiddleDownloaderMiddleware':500,
	'Xxxxmiddle.middlewares.XxxxmiddleRandomUaMiddleware':200,
	'Xxxxmiddle.middleware.XxxxmiddleRandomProxyMiddleware':249,
	'Xxxxmiddle.middleware.XxxxCookieMiddleware':199
	}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/686210
推荐阅读
相关标签
  

闽ICP备14008679号