【问题标题】:Saving cookies between scrapy scrapes在刮擦之间保存 cookie
【发布时间】:2014-09-25 10:53:00
【问题描述】:

我每天都从一个网站收集数据。每天我运行scrapy,第一个请求总是被重定向到网站主页,因为scrapy 似乎还没有设置任何cookie。然而,在第一次请求之后,scrapy 收到了 cookie,然后就可以正常工作了。

然而,这让我很难将“scrapy view”等工具与任何特定的 url 一起使用,因为该站点将始终重定向到主页,而这就是 scrapy 将在我的浏览器中打开的内容。

scrapy 可以保存 cookie 并且我指定在所有scrapy 上使用它吗?我可以指定将它与scrapy view等一起使用吗?

【问题讨论】:

  • 我也有兴趣在蜘蛛运行之间保存 cookie...你有没有想过这个问题?
  • 不幸的是,不是 Brad,我不再需要进行抓取或使用 scrapy。

标签: scrapy


【解决方案1】:

scrapy 运行之间没有内置机制来持久化 cookie,但你可以自己构建它(源代码只是为了演示这个想法,未经测试):

第 1 步:将 cookie 写入文件。

从解析函数中的响应标头“Set-Cookie”中获取 cookie。然后把它序列化成一个文件。

这里解释了几种方法:Access session cookie in scrapy spiders

我更喜欢直接的方法:

# in your parse method ...
# get cookies
cookies = ";".join(response.headers.getlist('Set-Cookie'))
cookies = cookies.split(";")
cookies = { cookie.split("=")[0]: cookie.split("=")[1] for cookie in cookies }
# serialize cookies
# ... 

理想情况下,这应该在您的抓取工具收到的最后一个响应中完成。将每个响应附带的 cookie 序列化到同一个文件中,覆盖您在处理先前响应期间序列化的 cookie。

第 2 步:从文件中读取和使用 cookie

要在从文件中加载 cookie 后使用 cookie,您只需将它们作为“cookies”参数传递到您执行的第一个请求中:

def start_requests(self):
    old_cookies #= deserialize_cookies(xyz)
    return Request(url, cookies=old_cookies, ...)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 2015-08-25
    • 1970-01-01
    • 1970-01-01
    • 2020-01-09
    • 2021-09-06
    相关资源
    最近更新 更多