Scrapy 本身是能够处理Cookie的, 工作原理和浏览器类似
- 浏览器发送请求
- 服务器返回响应, 并使用Set-Cookie来要求浏览器再下一次的请求中, 带上Cookie
- 下一次请求, 浏览器在请求头中使用Cookie带上上一次服务器要求设置的Cookie
整个流程无需人工干预, 由浏览器自动完成.
在Scrapy中, 这个也是无需干预的, 其功能在CookieMiddleware中自动完成
使用的方法就是:
1. settings.py中打开开关
COOKIES_ENABLED=True
COOKIES_DEBUG=True #这个是在log中能看到每次请求发出了和接收到什么Cookie
2. 运行你的爬虫即可
那么, 问题来了, 怎么手动带上额外的Cookie呢?
翻了很多文档和源码, 特总结如下
- 带上Cookie, 一定是在Request上操作的, 所以, 不要去翻Response的源码了.
- Request有2个方法
1) Request, FormRequest
2) response.follow(…) #这个执行完了, 会返回一个Request对象
3. 为什么会要手动添加一个Cookie
答案就是现在的网页很多都用js来给document添加cookie
比如document.cookie=’person=zhouxingchi’;
这个在网页上, 由js添加的cookie, 再下一次请求的时候, 如果使用浏览器, 是可以带到下一个请求中的.
但是在scrapy里, 因为获取的是源码, 故js无法执行, 所以, 要求开发人员手动为下一个请求添加上该cookie.