gpt4 book ai didi

python - Scrapy - 如何管理 cookie/ session

转载 作者:IT老高 更新时间:2023-10-28 20:31:06 26 4
gpt4 key购买 nike

我有点困惑 cookie 如何与 Scrapy 一起工作,以及您如何管理这些 cookie。

这基本上是我正在尝试做的简化版本: enter image description here


网站的运作方式:

当您访问该网站时,您会获得一个 session cookie。

当您进行搜索时,网站会记住您搜索的内容,因此当您执行诸如转到下一页结果之类的操作时,它会知道它正在处理的搜索。


我的脚本:

我的蜘蛛有一个 searchpage_url 的起始 url

parse() 请求搜索页面,并将搜索表单响应传递给 search_generator()

search_generator() 然后 yield 使用 FormRequest 的大量搜索请求和搜索表单响应。

这些 FormRequest 中的每一个以及后续的子请求都需要拥有自己的 session ,因此需要拥有自己的单独 cookiejar 和自己的 session cookie。


我已经看到文档中有关阻止 cookie 合并的元选项的部分。这实际上是什么意思?这是否意味着发出请求的蜘蛛将在其余生中拥有自己的 cookiejar?

如果 cookie 在每个 Spider 级别上,那么当生成多个 Spider 时它是如何工作的?是否可以只让第一个请求生成器产生新的蜘蛛并确保从那时起只有那个蜘蛛处理 future 的请求?

我假设我必须禁用多个并发请求。否则一个蜘蛛会在同一个 session cookie 下进行多次搜索,而 future 的请求只会与最近的搜索有关?

我很困惑,任何澄清都会非常受欢迎!


编辑:

我刚刚想到的另一个选项是完全手动管理 session cookie,并将其从一个请求传递到另一个请求。

我想这意味着禁用 cookie.. 然后从搜索响应中获取 session cookie,并将其传递给每个后续请求。

这是你在这种情况下应该做的吗?

最佳答案

三年后,我认为这正是您想要的: http://doc.scrapy.org/en/latest/topics/downloader-middleware.html#std:reqmeta-cookiejar

只需在你的蜘蛛的 start_requests 方法中使用类似的东西:

for i, url in enumerate(urls):
yield scrapy.Request("http://www.example.com", meta={'cookiejar': i},
callback=self.parse_page)

请记住,对于后续请求,您每次都需要显式重新附加 cookiejar:

def parse_page(self, response):
# do some processing
return scrapy.Request("http://www.example.com/otherpage",
meta={'cookiejar': response.meta['cookiejar']},
callback=self.parse_other_page)

关于python - Scrapy - 如何管理 cookie/ session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4981440/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com