Web scraping 登录在SplashAPI中工作,但在使用SplashRequest时不工作
相对较新的飞溅。我正在尝试刮一个需要登录的网站。我从SplashAPI开始,我可以完美地登录它。然而,当我使用SplashRequest将代码放入一个scrapy spider脚本中时,它无法登录Web scraping 登录在SplashAPI中工作,但在使用SplashRequest时不工作,web-scraping,scrapy,scrapy-splash,Web Scraping,Scrapy,Scrapy Splash,相对较新的飞溅。我正在尝试刮一个需要登录的网站。我从SplashAPI开始,我可以完美地登录它。然而,当我使用SplashRequest将代码放入一个scrapy spider脚本中时,它无法登录 import scrapy from scrapy_splash import SplashRequest class Payer1Spider(scrapy.Spider): name = "payer1" start_url = "https://provider.w
import scrapy
from scrapy_splash import SplashRequest
class Payer1Spider(scrapy.Spider):
name = "payer1"
start_url = "https://provider.wellcare.com/provider/claims/search"
lua_script = """
function main(splash,args)
assert(splash:go(args.url))
splash:wait(0.5)
local search_input = splash:select('#Username')
search_input:send_text('')
local search_input = splash:select('#Password')
search_input:send_text('')
assert(splash:wait(0.5))
local login_button = splash:select('#btnSubmit')
login_button:mouse_click()
assert(splash:wait(7))
return{splash:html()}
end
"""
def start_requests(self):
yield SplashRequest(self.start_url, self.parse_result,args={'lua_source': self.lua_script},)
def parse_result(self, response):
yield {'doc_title' : response.text}
输出的HTML是登录页面,而不是登录后的页面。您必须将endpoint='execute'添加到SplashRequest以执行lua脚本:
yield SplashRequest(self.start_url, self.parse_result, args={'lua_source': self.lua_script}, endpoint='execute')
我相信你确实不需要splash来登录这个网站。您可以尝试下一步: 得到https://provider.wellcare.com 然后
# Get request verification token..
token = response.css('input[name=__RequestVerificationToken]::attr(value)').get()
# Forge post request payload...
data = [
('__RequestVerificationToken', token),
('Username', 'user'),
('Password', 'pass'),
('ReturnUrl', '/provider/claims/search'),
]
#Make dict from list of tuples
formdata=dict(data)
# And then execute request
scrapy.FormRequest(
url='https://provider.wellcare.com/api/sitecore/Login',
formdata=formdata
)
不完全确定这一切是否都能奏效。但是你可以试试。我可以使用FormRequest来完成,我只是想知道SplashRequest是否出了问题,因为它在API中工作正常。