python教程—如何管理cookies/会话-Python实用宝典

python教程—如何管理cookies/会话

我有点搞不懂cookie是如何与Scrapy一起工作的,以及如何管理这些cookie。这基本上是我要做的一个简化版本:

我有点搞不懂cookie是如何与Scrapy一起工作的,以及如何管理这些cookie。

这基本上是我要做的一个简化版本:
如何管理cookies/会话


网站运作方式:

当你访问网站时,你会得到一个会话cookie。

当你进行搜索时,网站会记住你搜索的内容,所以当你进入搜索结果的下一页时,它就知道你在处理什么搜索。


我的脚本:

我的spider有一个searchpage_url的开始url

parse()请求searchpage,搜索表单响应传递给search_generator()

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

每个表单请求,以及后续的子请求都需要有自己的会话,因此需要有自己的单独的cookiejar和自己的会话cookie。


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

如果cookie在每个Spider级别上,那么当多个Spider被生成时,它是如何工作的?是否可能只让第一个请求生成器生成新的爬行器,并确保从那时起只有该爬行器处理未来的请求?

我假设我必须禁用多个并发请求…否则,一个爬行器将在同一个会话cookie下进行多次搜索,而未来的请求将只与最近的搜索相关?

我很困惑,如有任何澄清,将不胜感激!


编辑:

我刚刚想到的另一个选项是完全手工管理会话cookie,并将它从一个请求传递到另一个请求。

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

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

回答

三年后,我想这正是你想要的:
< a href = " http://doc.scrapy.org/en/latest/topics/downloader-middleware.html std: reqmeta-cookiejar”rel = " noreferrer " > http://doc.scrapy.org/en/latest/topics/downloader-middleware.html std: reqmeta-cookiejar < / >

只需在spider的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实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典

本文由 Python实用宝典 作者:Python实用宝典 发表,其版权均为 Python实用宝典 所有,文章内容系作者个人观点,不代表 Python实用宝典 对观点赞同或支持。如需转载,请注明文章来源。
0

发表评论