基于Scrapy框架的下载器中间件创建User-Agent池
前言
本文中介绍 如何基于 Scrapy 框架的下载器中间件创建 User-Agen t池;Scrapy 框架中有2种中间件,爬虫中间件(Spider Middleware)和下载中间件(Downloader Middleware,其中较为常用的是下载器中间件,下载器中间件是一个挂钩 Scrapy 的请求与响应处理的框架,是一个轻量级的系统,用于全局更改Scrapy的请求和响应。
正文
1、添加中间件的流程
- 在 middlewares.py 中新建 User-Agent 中间件类
- 在 settings.py 中添加此下载器中间件,设置优先级并开启
2、创建User-Agent池
使用 fake_useragent 模块
from fake_useragent import UserAgent
agent = UserAgent().random # 生成随机的"User-Agent"
3、基于Scrapy框架的下载器中间件创建User-Agent池的具体操作
- 在 middlewares.py 中新建 User-Agent 中间件类
# 中间件1:包装随机的Uesr-Agent
class BaidumiddleRandomDownloaderMiddleware:
def process_request(self, request, spider):
"""
function:
in:
out:
return: int >0 ok, <0 some wrong
others:
"""
agent = UserAgent().random # 生成随机的"User-Agent"
# Request()方法中 所有的参数都可以作为 请求对象request的属性
# Request参数都有什么?urlm,meta,callback,headers,cookies
request.headers["User-Agent"] = agent
print(agent) # 打印 "User-Agent"
# 之后要开启中间件
- 在 settings.py 中添加此下载器中间件,设置优先级并开启
# Enable or disable downloader middlewares
# See https://docs.scrapy.org/en/latest/topics/downloader-middleware.html
# 开启中间件
DOWNLOADER_MIDDLEWARES = {
"BaiduMiddle.middlewares.BaidumiddleDownloaderMiddleware": 543,
"BaiduMiddle.middlewares.BaidumiddleRandomDownloaderMiddleware": 200,
}
- 执行效果