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 进行合并