问题描述
我目前正在尝试抓取网站并在抓取时保持登录状态。不幸的是,据我所知,飞溅会在每次飞溅请求时重置 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)