美文网首页
Scrapy框架--cookie的获取/传递/本地保存

Scrapy框架--cookie的获取/传递/本地保存

作者: 雷子_ | 来源:发表于2017-12-06 12:04 被阅读0次

环境:Python3.6 + Scrapy1.4
我要实现的东西:1. 完成模拟登陆
        2. 登陆成功后提取出cookie,然后保存到本地cookie.txt文件中
        3. 再次使用时从本地的cookie.txt中读取cookie,省略模拟登陆.


看了一些关于Scrapy操作cookie的博客,写的大同小异(都不好使...).我总结一下我尝试出来的关于cookie的提取和传递的操作,亲测可用

Cookie的传递和提取

from scrapy.http.cookies import CookieJar    # 该模块继承自内置的http.cookiejar,操作类似

# 实例化一个cookiejar对象
cookie_jar = CookieJar()

# 首先是cookie的提取
class MySpider(scrapy.Spider):
    ....
    ....
    # 模拟登陆,之后调用一个检查是否登录成功的函数
    def login(self, response):
        ....
        return [scrapy.FormRequest(
            url=login_url,
            formdata = {'username':xxx, 'password':xxx},
            callback = self.check_login
        )]

def check_login(self, response):
    if 登录成功:
        # 到这里我们的登录状态已经写入到response header中的'Set-Cookies'中了,
        # 使用extract_cookies方法可以提取response中的cookie
        cookiejar.extract_cookies(response, response.request)
        # cookiejar是类字典类型的,将它写入到文件中
        with open('cookies.txt', 'w') as f:
            for cookie in cookie_jar:
                f.write(str(cookie) + '\n')

# 有些情况可能在发起登录之前会有一些请求,会陆续的产生一些cookie,可以在第一次请求的时候将cookiejar写入到request的meta中进行传递
scrapy.Request(url, callback=self.xxx, meta={'cookiejar': cookiejar})
# 之后每次需要传递这个cookiejar对象可以从response.meta中拿到
scrapy.Request(url, callback=self.xxx, meta={'cookiejar': response.meta['cookiejar']})

看了不少博文中只是写将cookie添加到meta中,这样就可以在请求的过程中获取到cookie.我这样尝试过,cookiejar在多个请求-响应中流转后依然是空的,所以只能在需要的时候使用cookiejar.extract_cookies方法进行手动提取.
若哪位大神知道meta中的cookiejar自行获取cookie的方法,请评论指点,谢谢!

从本地文件中读取Cookie

     with open('cookies.txt', 'r') as f:
         cookiejar = f.read()
         p = re.compile(r'<Cookie (.*?) for .*?>')
         cookies = re.findall(p, cookiejar)
         cookies = (cookie.split('=', 1) for cookie in cookies)
         cookies = dict(cookies)

之后可以在第一次发起请求(start_request)时将cookie手动添加到scrapy.Requestcookies参数中,cookie在后续的请求中会自行流转.

scrapy.Request(url, callback=self.xxx, cookies=cookies)



关于request meta key中cookiejar的作用请参看Scrapy源码注解--CookiesMiddleware--2017.12.18

相关文章

  • Scrapy框架--cookie的获取/传递/本地保存

    环境:Python3.6 + Scrapy1.4我要实现的东西:1. 完成模拟登陆        2. 登陆成功后...

  • 图片验证码

    /** 逻辑:按钮通过data获取img,同时保存本次获取图片验证码接口的cookie,保存本地。登录时 塞上此c...

  • 登录页面的记住密码

    思路:1.页面初始化时,判断本地的cookie里面有没有保存过账号和密码。2.如果有,就获取本地的cookie数据...

  • python spider cookie

    1、第一次发送POST请求,获取响应头Cookie值,保存到本地 2、第二次后续都发送GET请求,直接读取本地保存...

  • Jmeter中传递cookie值

    场景:用户登陆后会本地会保存cookie,cookie是用来跟服务端验证此用户已经登陆过的重要信息,但是如何获取并...

  • react-native fetch使用cookie登录

    效果,登录后获取到cookie,保存到本地,在需要登录接口请求的fetch中加入cookie使用到的第三方有imp...

  • node.js cookie

    cookie,存储用户本地信息。 cookie 特点 cookie 保存在浏览器本地,只要不过期,关闭浏览器也会存...

  • 一、用Scrapy框架开发爬虫

    用Scrapy框架做一个爬虫,将结果保存到MongoDB 本文用Scrapy框架实现一个爬虫的例子,Scrapy的...

  • Python3 + selenium 3 + cookie 自动

    2019.4.12 主要是两步 1.第一步获取到登录cookie 并保存到本地(登录时一定要选择保存密码) 2.使...

  • iOS 获取准确的Cookie

    项目上需要将服务器返回的cookie上的sid项保存到本地用于维护一个长登陆状态网上获取Cookie的方法一般是这...

网友评论

      本文标题:Scrapy框架--cookie的获取/传递/本地保存

      本文链接:https://www.haomeiwen.com/subject/amrkixtx.html