我试图在一个爬虫中访问会话 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.
以下是有关我原始问题的更多细节:
不幸的是,我尝试了您的想法,但没有看到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等及其相应值的字典。谢谢 :)