在scrapy擦伤之间保存饼干

时间:2014-08-02 09:47:45

标签: scrapy

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

然而,这使我很难使用" scrapy view"等工具。使用任何特定网址的等等,因为该网站将始终重定向到主页,这就是我的浏览器将打开scrapy。

可以scrapy保存cookie,我指定在所有擦除上使用它吗?我可以指定将它与scrapy视图等一起使用。

1 个答案:

答案 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, ...)