在scrapy擦伤之间保存饼干

rob*_*sco 5 scrapy

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

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

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

Don*_*ons 1

没有内置机制可以在 scrapy 运行之间保留 cookie,但您可以自己构建它(源代码只是为了演示该想法,未经过测试):

第 1 步:将 cookie 写入文件。

从解析函数中的响应标头“Set-Cookie”获取 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
# ... 
Run Code Online (Sandbox Code Playgroud)

理想情况下,这应该使用您的抓取工具收到的最后一个响应来完成。将每个响应附带的 cookie 序列化到同一文件中,覆盖您在处理先前响应期间序列化的 cookie。

第 2 步:从文件中读取并使用 cookie

要在从文件加载 cookie 后使用 cookie,您只需将它们作为“cookies”参数传递到您执行的第一个请求中:

def start_requests(self):
    old_cookies #= deserialize_cookies(xyz)
    return Request(url, cookies=old_cookies, ...)
Run Code Online (Sandbox Code Playgroud)