【发布时间】:2012-02-01 06:16:12
【问题描述】:
我正在尝试访问蜘蛛中的会话 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?我正在查看 cookie 中间件:scrapy.contrib.downloadermiddleware.cookies 和 scrapy.http.cookies 但似乎没有任何直接的方式来访问会话饼干。
这里有一些关于我原来的问题的更多细节:
不幸的是,我使用了你的想法,但我没有看到 cookie,尽管我确信它们存在,因为 scrapy.contrib.downloadermiddleware.cookies 中间件确实打印出了 cookie!这些正是我想要抓取的 cookie。
这就是我正在做的事情:
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 等以及相应的值。
谢谢:)
【问题讨论】:
-
我是否理解正确,您想在 facebook 上进行身份验证,但要从在 facebook 上进行身份验证的不同域中抓取数据?
标签: session cookies session-cookies scrapy