【问题标题】:How to keep splash cookies如何保存飞溅饼干
【发布时间】:2021-03-03 11:38:39
【问题描述】:
我目前正在尝试抓取网站并在抓取时尝试保持登录状态。不幸的是,据我了解,splash 在每次启动请求时都会重置 cookie。我正在使用带有scrapy的splash来使用javascript抓取网站。我的问题是:如何防止我的 cookie 被重置?
在自己爬网寻找解决方案后,我知道它与 lua 脚本或 cookie 中间件有关,但我不知道如何使用它们。如果有人可以提供帮助,那就太好了。所有谈论这个的网站都不清楚,所以请尽可能清楚。
【问题讨论】:
标签:
web-scraping
scrapy
session-cookies
middleware
scrapy-splash
【解决方案1】:
是的,您可以在 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 中,您需要使用命令设置 cookie:
splash:init_cookies(splash.args.cookies)