开发者社区> 程序猿v> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Python爬虫:scrapy管理服务器返回的cookie

简介: Python爬虫:scrapy管理服务器返回的cookie
+关注继续查看

1、使用cookie

settings.py启用

COOKIES_ENABLED=True  # 启用cookie
COOKIES_DEBUG=True  # 显示发送和接受的cookie

2、使用自定义cookie

如果要使用登录验证的cookie,那么可以这样

for url in self.start_urls:
    yield scrapy.Request(url, cookies={"username": "pengshiyu"})

3、删除服务器端返回的cookie

有一种情况:服务器端每次都重新写入一个cookie记录你的访问次数,我不希望将这个cookie带入下一个请求

我们知道,服务器端返回的cookie,可以通过以下语句获取


response.headers.get('Set-Cookie')

这里的headers看起来很像一个字典,那么直接移除试试

response.headers.pop('Set-Cookie')

理论上应该是可行的,不过我暂时没有成功


scrapy中处理cookie的中间件优先级是700

'scrapy.downloadermiddlewares.cookies.CookiesMiddleware': 700,

处理请求cookie的中间件应该在其之前执行,优先级应该低于700

处理响应cookie的中间件应该在其之后执行,优先级应该高于700


4、忽略服务器返回的所有cookie

scrapy中,单个spider使用的是一个cookie session,如果单spider使用多cookie session,这样,让每个request请求都是独立的,不就可以忽略服务器再次返回的所有cookie了吗?


默认情况下使用一个cookiejar(session),不过可以传递一个标示符来使用多个。

例如:

def start_requests(self):
    for i, url in enumerate(urls):
        yield Request(url, meta={'cookiejar': i},
            callback=self.parse_page)
# 在之后的request请求中接着传递
def parse_page(self, response):
    # do some processing
    return Request("http://www.example.com/otherpage",
        meta={'cookiejar': response.meta['cookiejar']},
        callback=self.parse_other_page)

参考:

下载器中间件(Downloader Middleware)-CookiesMiddleware

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Python 编程 | 连载 13 - Python 的流程控制
Python 编程 | 连载 13 - Python 的流程控制
6 0
Python 编程 | 连载 14 - Python 的函数
Python 编程 | 连载 14 - Python 的函数
15 0
Python 编程 | 连载 15 - Python 的类
Python 编程 | 连载 15 - Python 的类
7 0
Python 编程 | 连载 16 - 类的特性
Python 编程 | 连载 16 - 类的特性
10 0
Python 编程 | 连载 17 - 高阶函数与装饰器
Python 编程 | 连载 17 - 高阶函数与装饰器
14 0
Python 编程 | 连载 18 - 异常处理(上)
Python 编程 | 连载 18 - 异常处理
15 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
Python第五讲——关于爬虫如何做js逆向的思路
立即下载
Python系列直播第一讲——Python中的一切皆对象
立即下载
Python 脚本速查手册
立即下载