在刮痧之间保存饼干



我每天从一个站点收集数据。每天我运行scrapy,第一个请求总是被重定向到网站主页,因为它似乎scrapy没有设置任何cookie。然而,在第一个请求之后,scrapy接收到cookie并从此正常工作。

然而,这使得我很难使用像"scrapy视图"这样的工具来处理任何特定的url,因为网站总是会重定向到主页,而这就是scrapy在我的浏览器中打开的。

可以保存cookie和我指定使用它在所有刮痧?

没有内置的机制来在多次运行之间持久化cookie,但是您可以自己构建它(源代码只是为了演示这个想法,未经过测试):

第一步:写入cookie到文件

从解析函数的响应头'Set-Cookie'中获取cookie。然后将其序列化到一个文件中。

在scrapy spider中访问session cookie

我更喜欢直接的方法:

# 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
# ... 

理想情况下,这应该与scraper收到的最后一个响应一起完成。将每个响应附带的cookie序列化到同一个文件中,覆盖您在处理前一个响应时序列化的cookie。

步骤2:从文件

读取和使用cookies

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

def start_requests(self):
    old_cookies #= deserialize_cookies(xyz)
    return Request(url, cookies=old_cookies, ...)

最新更新