Ich versuche auf Cookies zuzugreifen, nachdem ich eine Anfrage mit Splash gestellt habe. Unten ist, wie ich die Anfrage erstellen.Lesen Sie Cookies von Splash Anfrage
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'
}
)
Das Skript ist eine genaue Kopie von Splash Dokumentation.
Also versuche ich auf die Cookies zuzugreifen, die auf der Webseite eingestellt sind. Wenn ich Splash nicht verwende, funktioniert der Code unten, wie ich es erwarte, aber nicht wenn ich Splash benutze.
self.logger.debug('Cookies: %s', response.headers.get('Set-Cookie'))
Dies gibt während Splash mit:
2017-01-03 12:12:37 [spider] DEBUG: Cookies: None
Wenn ich nicht Splash mit diesem Code funktioniert und gibt die von der Webseite zur Verfügung steht Cookies.
Die Dokumentation von Splash zeigt diesen Code als Beispiel:
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.
Ich bin nicht sicher, ob ich das richtig bin zu verstehen, aber ich würde sagen, dass ich in der Lage sein sollte, die Cookies in den gleichen zugreifen So wie wenn ich kein Splash benutze.
Einstellungen Middleware:
# 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,
}
So ist meine Frage: Wie kann ich Cookies, während ein Splash Anfrage mit?
Ich habe den Endpunkt der Anfrage hinzugefügt, aber ohne Ergebnis. Das response.headers.get ('Set-Cookie') gibt immer noch einen NoneType zurück. Für den response.cookiejar bekomme ich einen Fehler: AttributeError: 'SplashTextResponse' Objekt hat kein Attribut 'cookiejar' – Casper
@Casper - Sind Sie sicher, dass alle beschriebenen Optionen in Ihrer settings.py gesetzt sind? Ist 'scrapy_splash.SplashCookiesMiddleware' zu' DOWNLOADER_MIDDLEWARES' hinzugefügt? –
Ich habe die Frage mit der Einstellungsvariable DOWNLOADER_MIDDLEWARES aktualisiert. – Casper