Scrapy-如何管理cookie /会话
我对cookie如何与Scrapy一起使用以及如何管理这些cookie感到有些困惑。
网站的运作方式:
当你访问网站时,你将获得一个会话cookie。
当你进行搜索时,该网站会记住你搜索的内容,因此当你执行诸如转到下一页结果之类的操作时,该网站就会知道它正在处理的搜索。
我的剧本:
我的spider的起始网址为searchpage_url
parse()
搜索页面由请求,搜索表单响应被传递到search_generator()
search_generator()
然后yield
使用FormRequest
和搜索表单响应进行很多搜索请求。
每个FormRequests
和后续的子请求都需要具有自己的会话,因此需要具有自己的单个cookiejar
和会话cookie
。
我已经看过文档中有关阻止cookie
合并的meta选项的部分。这实际上是什么意思?这是否意味着发出请求的spider将在其余生中拥有自己的cookiejar
?
如果这些cookie处于每个spider级别,那么当产生多个蜘蛛时如何工作?是否可以仅使第一个请求生成器生成新的spider,并确保从那时起仅该spider处理将来的请求?
我假设我必须禁用多个并发请求。否则,一个蜘蛛将在同一会话cookie下进行多个搜索,而将来的请求将仅与最近进行的搜索有关?
我很困惑,任何澄清都将受到欢迎!
编辑:
我刚刚想到的另一个选择是完全手动管理会话cookie,并将其从一个请求传递到另一个请求。
我想那将意味着禁用cookie ..,然后从搜索响应中获取会话cookie,并将其传递给每个后续请求。
这是你在这种情况下应该做的吗?
回答:
只需在你的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)
以上是 Scrapy-如何管理cookie /会话 的全部内容, 来源链接: utcz.com/qa/434170.html