Web サイトにログインしてから、サインイン後にのみアクセスできるいくつかの URL をクロールしようとしています。
def start_requests(self):
script = """
function main(splash)
splash:init_cookies(splash.args.cookies)
assert(splash:go(splash.args.url))
splash:set_viewport_full()
local search_input = splash:select('input[name=username]')
search_input:send_text("MY_USERNAME")
splash:evaljs("document.getElementById('password').value = 'MY_PASSWORD';")
local submit_button = splash:select('input[name=signin]')
submit_button:click()
local entries = splash:history()
local last_response = entries[#entries].response
return {
cookies = splash:get_cookies(),
headers = last_response.headers,
html = splash:html()
}
end
"""
yield scrapy_splash.SplashRequest(
url='https://www.website.com/login',
callback=self.after_login,
endpoint='execute',
cache_args=['lua_source'],
args={'lua_source': script}
)
def after_login(self, response):
with open('after_login.html') as out:
out.write(response.body.decode(''utf-8))
script = """
function main(splash)
splash:init_cookies(splash.args.cookies)
assert(splash:go(splash.args.url))
splash:set_viewport_full()
assert(splash:wait(10))
return {
cookies = splash:get_cookies(),
html = splash:html()
}
end
"""
yield scrapy_splash.SplashRequest(
url='https://www.website.com/search?tools',
callback=self.parse,
endpoint='execute',
cookies = response.data['cookies'],
headers = response.data['headers'],
args={'lua_source': script},
)
def parse(self, response):
with open('search_result.html', 'w+') as out:
out.write(response.body.decode('utf-8'))
セッション処理の指示に従っています。まず、ログインすると、ホームページにリダイレクトされ始めます。これはlogin.htmlに正しく保存されています(ログインは機能しています)。次に、Cookie を取得して 2 番目の SplashRequest に設定して検索しますが、search_result.htmlの応答は、ユーザーがログインしていないことです。別の SplashRequests でセッションを永続化するために何が欠けているか、間違っていますか?
よろしく、