Request
方法
- RequestGet
- RequestPost
- RequestDelete
- RequestOptions
- RequestHead
- RequestPatch
参数
- meta:自动向下传递参数,不需要手动传,需要一个字典
- filter_repeat:是否过滤请求(默认不过滤)
- keep_session:是否保持 session 自动 cookie,tls 连接
- keep_cookie:自动 cookieJar
- callback:回调函数(必须有)
- cookie_jar:cookieJar(自动创建、传递,可通过此参数获取 cookie)
- priority:使用优先级队列时的优先级(默认)
- downloader:自定义的下载器(不需要实例化)
- downloader_parser:自定义的下载解析器(不需要实例化)
- command:自定义下载器时的传参字典
除了 requests、httpx 参数常用外,还可以通过 command 指定其它参数,方便自定义请求器时使用
注意
- meta 是自动传递的,临时的直接 xxx=yyy
- 请求过滤默认是不开启的,需要开启 settings.FILTER_REQUEST(普通过滤)
- 在开启普通过滤的情况下,可以选择开启 settings.STRICT_FILTER(严格过滤)加锁,严重影响性能,不推荐
- keep_session 虽然可以提高部分效率,但是除非你对 cookie 要求不高,否则分布式 cookie 无法随着请求发到其他机器
- keep_cookie 推荐,类似 scrapy 手动使用 cookiejar,这里只要一直 keep_cookie=True 就行
- 请求队列默认是 优先级队列,想修改通过 settings.REQUEST_QUEUE_MODE 修改
- 优先级队列,本身就有过滤重复请求的作用!!!
使用 meta
只要记住一点,meta 是在上一个请求上面
# 删除字段
del request.meta['']
# 清空 meta
request.meta.clear()
# 更新 meta
request.meta.update() # 方法1
yield RequestGet(url='xxx', meta={'xxx': 'yyy'}) # 方法2:这里会与之前的 meta 进行合并