当前位置: 首页 > 面试题库 >

Scrapy-如何管理cookie /会话

吴举
2023-03-14
问题内容

我对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)


 类似资料:
  • 问题内容: 如何使 connect.sid cookie本身仅是会话cookie,而不是持久性cookie? 我尝试失败 但是cookie仍具有到期时间戳。 问题答案: 以上工作。因此,通过将maxAge设置为null,我确实管理了expressjs以使用会话cookie。ew

  • Cookie提供客户端数据存储,仅支持少量数据。 通常,每个域2KB,这取决于浏览器。 Session提供服务器端数据存储,它支持大量数据。 让我们来看看如何在FuelPHP Web应用程序中创建cookie和会话。 Cookies FuelPHP提供了一个Cookie类来创建cookie项目。 Cookie类用于创建,分配和删除cookie。 配置Cookie Cookie类可以通过位于fuel

  • 使用CakePHP处理Cookie非常简单而且安全。 有一个CookieComponent类,用于管理Cookie。 该类提供了几种使用Cookie的方法。 写Cookie write()方法用于编写cookie。 以下是write()方法的语法。 Cake\Controller\Component\CookieComponent::write(mixed $key, mixed $value =

  • Cookie是从Web服务器发送到客户端计算机上的一小段数据。 CodeIgniter有一个名为“Cookie Helper”的帮助程序用于cookie管理。 Syntax set_cookie( $name [, $value = '' [, $expire = '' [, $domain = '' [, $path = '/' [, $prefix = '' [, $secure = FALS

  • 实际上,Axis2的会话管理也是通过Cookie实现的,与Web应用中的Session管理类似。如果读者使用C#访问支持会话(在同一个服务中的会话管理)的WebService,需要指定一个CookieContainer对象,代码如下: service.loginService ls = new service.loginService(); System.Net.CookieContainer 

  • 问题内容: 我需要Selenium才能完成javascript工作。 首先,我使用Scrapy登录,然后需要使用Selenium 打开。 问题在于Selenium没有cookie,因此它打开了登录页面。 有谁知道我该如何从曲奇到selenium传递曲奇? 问题答案: 由于您到目前为止还没有提供您编写的任何代码,因此我仅介绍您。 为了从Scrapy获取cookie,请查看和方法 为了设置硒驱动程序的