【发布时间】:2011-06-26 06:29:12
【问题描述】:
我有点困惑 cookie 如何与 Scrapy 一起工作,以及您如何管理这些 cookie。
这基本上是我正在尝试做的简化版本:
网站的运作方式:
当您访问该网站时,您会获得一个会话 cookie。
当您进行搜索时,网站会记住您搜索的内容,因此当您执行诸如转到下一页结果之类的操作时,它会知道它正在处理的搜索。
我的脚本:
我的蜘蛛有一个 searchpage_url 的起始 url
搜索页面由parse() 请求,搜索表单响应被传递给search_generator()
search_generator() 然后yields 大量使用FormRequest 的搜索请求和搜索表单响应。
每个 FormRequest 以及后续的子请求都需要有自己的会话,因此需要有自己的单独 cookiejar 和自己的会话 cookie。
我已经看到文档中有关阻止 cookie 合并的元选项的部分。这实际上是什么意思?这是否意味着发出请求的蜘蛛将在其余生中拥有自己的 cookiejar?
如果 cookie 在每个 Spider 级别上,那么当生成多个 Spider 时它是如何工作的?是否可以只让第一个请求生成器产生新的蜘蛛并确保从那时起只有那个蜘蛛处理未来的请求?
我假设我必须禁用多个并发请求。否则一个蜘蛛会在同一个会话 cookie 下进行多次搜索,而未来的请求只会与最近的搜索有关?
我很困惑,任何澄清都会非常受欢迎!
编辑:
我刚刚想到的另一个选项是完全手动管理会话 cookie,并将其从一个请求传递到另一个请求。
我想这意味着禁用 cookie.. 然后从搜索响应中获取会话 cookie,并将其传递给每个后续请求。
这是你在这种情况下应该做的吗?
【问题讨论】:
-
那么,您找到解决问题的方法了吗?我也有这种网站要抓取,并且还在考虑在请求之间手动传递带有 PHPSESSID 的 cookie。
-
doc.scrapy.org/topics/request-response.html#scrapy.http.Request 我想用
meta={'dont_merge_cookies': True}
标签: python session cookies session-cookies scrapy