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.bodyif "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总结
以上是内存溢出为你收集整理的在刮刀蜘蛛中访问会话cookie全部内容,希望文章能够帮你解决在刮刀蜘蛛中访问会话cookie所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)