我每天都在从网站上收集数据.每天我都运行scrapy,第一个请求总是被重定向到网站主页,因为看起来scrapy还没有设置任何cookie.但是在第一次请求之后,scrapy会收到cookie,从那时起就可以了.
然而,这使我很难使用"scrapy view"等工具与任何特定网址,因为网站将始终重定向到主页,这就是我的浏览器将打开scrapy.
可以scrapy保存cookie,我指定在所有擦除上使用它吗?我可以指定使用它与scrapy视图等.
没有内置机制可以在 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)
| 归档时间: |
|
| 查看次数: |
765 次 |
| 最近记录: |