加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 资源网站 > 资源 > 正文

在刮刀蜘蛛中访问会话cookie

发布时间:2020-12-14 21:42:54 所属栏目:资源 来源:网络整理
导读:我正在尝试访问蜘蛛中的会话cookie。我首先使用蜘蛛登录社交网络: def parse(self,response): return [FormRequest.from_response(response,formname='login_form',formdata={'email': '...','pass':'...'},callback=self.after_login)] 在after_login中,
我正在尝试访问蜘蛛中的会话cookie。我首先使用蜘蛛登录社交网络:
def parse(self,response):

        return [FormRequest.from_response(response,formname='login_form',formdata={'email': '...','pass':'...'},callback=self.after_login)]

在after_login中,我想访问会话cookie,以便将它们传递给另一个模块(此处为selenium),以进一步处理具有验证会话的页面。

我想要这样的事情:

def after_login(self,response):

        # process response
        .....

        # access the cookies of that session to access another URL in the
        # same domain with the autehnticated session.
        # Something like:
        session_cookies = XXX.get_session_cookies()
        data = another_function(url,cookies)

不幸的是,response.cookies不返回会话cookie。

如何获得会话Cookie?我正在查看cookies中间件:scrapy.contrib.downloadermiddleware.cookies和scrapy.http.cookies,但似乎没有任何直接的访问会话cookie的方式。

这里有一些更多的细节是我的原始问题:

不幸的是,我使用你的想法,但我不明白cookies,虽然我知道确定它们存在,因为scrapy.contrib.downloadermiddleware.cookies中间件打印出饼干!这些正是我想要抓的饼干。

所以这里是我在做什么

after_login(self,response)方法在适当的身份验证后接收到响应变量,然后我访问具有会话数据的URL:

def after_login(self,response):

        # testing to see if I can get the session cookies
        cookieJar = response.meta.setdefault('cookie_jar',CookieJar())
        cookieJar.extract_cookies(response,response.request)
        cookies_test = cookieJar._cookies
        print "cookies - test:",cookies_test

        # URL access with authenticated session
        url = "http://site.org/?id=XXXX"     
        request = Request(url=url,callback=self.get_pict)   
        return [request]

如下面的输出显示,确实有Cookie,但是我没有用cookieJar捕获它们:

cookies - test: {}
2012-01-02 22:44:39-0800 [myspider] DEBUG: Sending cookies to: <GET http://www.facebook.com/profile.php?id=529907453>
    Cookie: xxx=3..........; yyy=34.............; zzz=.................; uuu=44..........

所以我想得到一个包含键xxx,yyy等的字典和相应的值。

谢谢 :)

解决方法

一个典型的例子是登录服务器,在成功登录后提供一个新的会话ID。此新会话ID应与其他请求一起使用。

这是从源代码中获取的代码,似乎适用于我。

print 'cookie from login',response.headers.getlist('Set-Cookie')[0].split(";")[0].split("=")[1]

码:

def check_logged(self,response):
tmpCookie = response.headers.getlist('Set-Cookie')[0].split(";")[0].split("=")[1]
print 'cookie from login',response.headers.getlist('Set-Cookie')[0].split(";")[0].split("=")[1]
cookieHolder=dict(SESSION_ID=tmpCookie)

#print response.body
if "my name" in response.body:
    yield Request(url="<<new url for another server>>",cookies=cookieHolder,callback=self."<<another function here>>")
else:
    print "login failed"
        return

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读