我每天从一个站点收集数据。每天我运行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, ...)