我正在尝试在身份验证后从网站上搜索。我能够从经过身份验证的浏览器会话中获取JSESSIONID cookie,并使用urlopener下载正确的页面,如下所示。
import cookielib, urllib2
cj = cookielib.CookieJar()
c1 = cookielib.Cookie(None, "JSESSIONID", SESSIONID, None, None, DOMAIN,
True, False, "/store",True, False, None, False, None, None, None)
cj.set_cookie(c1)
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
fh = opener.open(url)
但是当我使用此代码创建scrapy请求时(尝试了dict cookie和cookiejar),下载的页面是未经过身份验证的版本。有谁知道问题是什么?
cookies = [{
'name': 'JSESSIONID',
'value': SESSIONID,
'path': '/store',
'domain': DOMAIN,
'secure': False,
}]
request1 = Request(url, cookies=self.cookies, meta={'dont_merge_cookies': False})
request2 = Request(url, meta={'dont_merge_cookies': True, 'cookiejar': cj})
答案 0 :(得分:1)
您可以从浏览器中获取JSESSIONID。
为什么不让Scrapy simulate a user login给你?
然后,我认为您的JSESSIONID cookie将坚持以下请求:
dont_merge_cookies默认为false:
当某个网站返回cookie(在响应中)时,这些存储在 该域名的Cookie,将在以后的请求中再次发送。 这是任何常规Web浏览器的典型行为。但是,如果, 出于某种原因,您希望避免与现有的Cookie合并 可以通过设置dont_merge_cookies键来指示Scrapy这样做 在Request.meta中为真。
不合并Cookie的请求示例:
request_with_cookies = Request(url="http://www.example.com", cookies={'currency': 'USD', 'country': 'UY'}, meta={'dont_merge_cookies': True})