我每天都会从网站收集数据。每天我都运行scrapy,第一个请求总是被重定向到网站主页,因为看起来scrapy还没有设置任何cookie。然而,在第一次请求之后,scrapy会收到cookie,从那时起就可以了。
然而,这使我很难使用" scrapy view"等工具。使用任何特定网址的等等,因为该网站将始终重定向到主页,这就是我的浏览器将打开scrapy。
可以scrapy保存cookie,我指定在所有擦除上使用它吗?我可以指定将它与scrapy视图等一起使用。
答案 0 :(得分:1)
没有内置机制可以在scrapy运行之间保留cookie,但你可以自己构建它(源代码只是为了演示这个想法,而不是测试):
第1步:将Cookie写入文件。
从响应标题中获取Cookie' Set-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,您只需将其传递给您执行的第一个请求,即Cookie' cookies'参数:
def start_requests(self):
old_cookies #= deserialize_cookies(xyz)
return Request(url, cookies=old_cookies, ...)