0
点赞
收藏
分享

微信扫一扫

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​​




举报

相关推荐

0 条评论