스플래시를 사용하여 요청한 후에 쿠키에 액세스하려고합니다. 다음은 요청을 작성한 방법입니다.스플래시 요청에서 쿠키 읽기
script = """
function main(splash)
splash:init_cookies(splash.args.cookies)
assert(splash:go{
splash.args.url,
headers=splash.args.headers,
http_method=splash.args.http_method,
body=splash.args.body,
})
assert(splash:wait(0.5))
local entries = splash:history()
local last_response = entries[#entries].response
return {
url = splash:url(),
headers = last_response.headers,
http_status = last_response.status,
cookies = splash:get_cookies(),
html = splash:html(),
}
end
"""
req = SplashRequest(
url,
self.parse_page,
args={
'wait': 0.5,
'lua_source': script,
'endpoint': 'execute'
}
)
스크립트는 Splash 설명서의 사본입니다.
그래서 웹 페이지에 설정된 쿠키에 액세스하려고합니다. 스플래시를 사용하지 않을 때는 아래 코드가 예상대로 작동하지만 스플래시는 사용하지 않습니다. 플래쉬를 사용하는 동안
self.logger.debug('Cookies: %s', response.headers.get('Set-Cookie'))
이 반환 : 나는 플래쉬를 사용하지 않는 경우
2017-01-03 12:12:37 [spider] DEBUG: Cookies: None
이 코드가 작동하고 웹 페이지에서 제공하는 쿠키를 반환합니다.
스플래쉬의 문서는 예제로이 코드를 보여줍니다
def parse_result(self, response):
# here response.body contains result HTML;
# response.headers are filled with headers from last
# web page loaded to Splash;
# cookies from all responses and from JavaScript are collected
# and put into Set-Cookie response header, so that Scrapy
# can remember them.
내가 올바르게 이해 해요 여부를 모르겠어요,하지만 난 같은에서 쿠키를 액세스 할 수 있어야합니다라고 말하고 싶지만 내가 스플래쉬를 사용하지 않을 때처럼.
미들웨어 설정 :
# Download middlewares
DOWNLOADER_MIDDLEWARES = {
# Use a random user agent on each request
'crawling.middlewares.RandomUserAgentDownloaderMiddleware': 400,
'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': None,
'scrapy.downloadermiddlewares.cookies.CookiesMiddleware': 700,
# Enable crawlera proxy
'scrapy_crawlera.CrawleraMiddleware': 600,
# Enable Splash to render javascript
'scrapy_splash.SplashCookiesMiddleware': 723,
'scrapy_splash.SplashMiddleware': 725,
'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810,
}
그래서 내 질문은 : 스플래시 요청을 사용하는 동안 어떻게 쿠키를 액세스합니까?
요청에 엔드 포인트를 추가했으나 결과가 없습니다. response.headers.get ('Set-Cookie')는 여전히 NoneType을 반환합니다. response.cookiejar에 대해 오류가 발생했습니다. AttributeError : 'SplashTextResponse'객체에 'cookiejar'속성이 없습니다. – Casper
@Casper - 설명한 모든 옵션이 settings.py에 설정되어 있습니까? 'scrapy_splash.SplashCookiesMiddleware'가'DOWNLOADER_MIDDLEWARES'에 추가 되었습니까? –
질문을 DOWNLOADER_MIDDLEWARES 설정 변수로 업데이트했습니다. – Casper