Python 刮屑飞溅不';t设置自定义请求头
我正在尝试使用Python2.7中的Scrapy+Splash来创建一个网站。 该网站使用JavaScript生成大部分HTML,这就是我需要Splash的原因 首先,我向Scrapy发出一个表单请求,要求登录到一个网站。这是成功的 然后,我从JSON响应中提取“access_token”,因为它应该在下一个请求中用作“Authorization”头,以向网站确认我已登录Python 刮屑飞溅不';t设置自定义请求头,python,header,request,scrapy,splash-screen,Python,Header,Request,Scrapy,Splash Screen,我正在尝试使用Python2.7中的Scrapy+Splash来创建一个网站。 该网站使用JavaScript生成大部分HTML,这就是我需要Splash的原因 首先,我向Scrapy发出一个表单请求,要求登录到一个网站。这是成功的 然后,我从JSON响应中提取“access_token”,因为它应该在下一个请求中用作“Authorization”头,以向网站确认我已登录 jsonresp = json.loads(response.body_as_unicode()) self.token =
jsonresp = json.loads(response.body_as_unicode())
self.token = 'Bearer ' + jsonresp['access_token']
self.my_headers['Authorization'] = self.token
在继续SplashRequest之前,我决定使用scrapy.Request测试会话。我传递了cookies和新的标题:
yield scrapy.Request('https://www.example.com/products', cookies=self.cookies, dont_filter=True, callback=self.parse_pages, headers=self.my_headers)
result.body中的HTML确认我已登录。太好了
调用response.request.headers显示还发送了“Authorization”头
{'Accept-Language': ['en-US,en;q=0.5'],
'Accept-Encoding': ['gzip,deflate'],
'Accept': ['application/json, text/plain, */*'],
'User-Agent': ['Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0'],
'Connection': ['keep-alive'],
'Referer': ['https://www.example.com/Web'],
'Cookie': ["___cookies___"],
'Content-Type': ['application/x-www-form-urlencoded'],
'Authorization': ['Bearer Zyb9c20JW0LLJCTA-GmLtEeL9A48se_AviN9xajP8NZVE8r6TddoPHC6dJnmbQ4RCddM8QVJ2v23ey-kq5f8S12uLMXlLF_WzInNI9eaI29WAcIwNK-FixBpDm4Ws3SqXdwBIXfkqYhd6gJs4BP7sNpAKc93t-A4ws9ckpTyih2cHeC8KGQmTnQXLOYch2XIyT5r9verzRMMGHEiu6kgJWK9yRL19PVqCWDjapYbtutKiTRKD1Q35EHjruBJgJD-Fg_iyMovgYkfy9XtHpAEuUvL_ascWHWvrFQqV-19p-6HQPocEuri0Vu0NsAqutfIbi420_zhD8sDFortDmacltNOw-3f6H1imdGstXE_2GQ']}
Cookie调试显示所有Cookie都已发送,没有问题
之后,我用SplashRequest替换了scrapy.Request:
yield SplashRequest('https://www.example.com/products', cookies=self.cookies, callback=self.parse_pages, args={"lua_source": lua_script, 'headers':self.my_headers}, endpoint='execute', errback=self.errors)
lua_脚本:
lua_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(2))
local entries = splash:history()
local last_response = entries[#entries].response
return {
url = splash:url(),
headers = last_response.headers,
http_status = last_response.status,
html = splash:html(),
}
end
"""
然而,我从Splash response获得的HTML显示我没有登录
Cookie调试未显示任何问题-发送的Cookie与以前相同
但以下是我通过调用response.request.headers得到的信息:
正如您所看到的,Splash并没有设置我的自定义标题,而是将cookies和默认的cookies组合在一起
我尝试将自己的头设置为SplashRequest函数参数和lua_脚本内部,但没有一种方法奏效
我的问题是,如何在Splash中设置我自己的请求头
{'Accept-Language': ['en'],
'Accept-Encoding': ['gzip,deflate'],
'Accept': ['text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'],
'User-Agent': ['Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0'],
'Cookie': ["___cokies___"],
'Content-Type': ['application/json']}