如何保留飞溅 cookie

问题描述

我目前正在尝试抓取网站并在抓取时保持登录状态。不幸的是,据我所知,飞溅会在每次飞溅请求时重置 cookie。我正在使用带有scrapy的飞溅来用javascript刮一个网站。我的问题是:如何防止我的 cookie 被重置?

自己在网上搜索解决方案后,我知道这与 lua 脚本或 cookie 中间件有关,但我不知道如何使用它们。如果有人可以提供帮助,那就太好了。所有谈论这个的网站都不清楚,所以请尽可能清楚。

解决方法

是的,您可以在 lua 脚本中设置 cookie 和返回 cookie。如果登录页面和抓取页面使用相同的脚本,你的脚本应该是这样的:

function main(splash)
    splash:init_cookies(splash.args.cookies)

    -- ... your script

    return {
        cookies = splash:get_cookies(),-- ... other results,e.g. html
    }
end

如果您使用不同的脚本进行登录和抓取,您可以从 login_script 返回 cookie 并将其与 SplashRequest 一起发送:

yield SplashRequest(url = url,callback=self.item_parse,endpoint='execute',args={
                'lua_source': self.scrape_script
            },meta={'cookies': cookies})

在scrape_script中你需要使用命令设置cookies:

 splash:init_cookies(splash.args.cookies)