lua语法的使用
如果返回的是字典形式的数据可以用lxml解析
在创建的爬虫文件中
import scrapy,os
from ..items import Hero
from scrapy_splash import SplashRequest
SplashRequest(专门用来生成给予Splash加载的网络请求)
语法解释
定义一段lua脚本控制页面行为
set_viewport_size(w, h):用来设置浏览器的尺寸,w代表宽度,h代表高度
go(url, baseurl, headers, http_method, body, formdata):完成指定页面的加载
url:需要加载的页面的网址
baseurl:可选参数,默认为空,表示资源加载的相对路径
headers:可选参数,默认为空,用来设置请求的header
body:可选参数,默认为空,发送POST请求时间服务器传输的参数数据
formdata:可选参数,默认为空,POST的时候对应的表单数据,默认使用form表单默认的编码格式即application/x-www-form-urlencode
wait():用来等待网页的加载,对应的时间以秒为单位
time:等待网页加载的时间
cancle_on_redirect:可选参数,默认为false,用来设置当网页发生重定向时是否结束等待
cancle_on_error:可选参数,默认为false,用来设置当网页发生错误时是否结束等待
html():将加载之后的网站以html格式返回
jpeg():将加载之后的网站截屏并且以jpg格式返回
jsfunc():将自定义的JavaScript方法转化成lua方法,但是自定义方法必须包含在[[]]中
autoload():完成第三方资源远程链接加载
script1 = """
function main(splash, args)
splash:set_viewport_size(1200, 2500)
splash.images_enabled = false
splash:autoload('https://cdn.jsdelivr.net/npm/jquery@1.12.4/dist/jquery.min.js')
splash:go(args.url)
splash:wait(args.wait)
click_fun = splash:jsfunc([[
function(){
$('label[data-id="Tank"]').click();
}
]])
click_fun()
splash:wait(args.wait)
return splash:png()
end
"""
def start_requests(self):
for url in self.start_urls:
# endpoint:设置splash渲染的方式,默认是render,html:即直接返回js渲染之后的网页,如果页面需要进行额外的js操作时,此时需要使用execute,execute可以保证js和lua脚本实现无缝融合
#args:用来设置未来向lua脚本中传递的参数,默认有一个url,该url在未设置时指向发送请求的url,wait:页面加载过程中等待的时间,单位为秒
yield SplashRequest(url=url, callback=self.parse, endpoint='execute', args={'lua_source': script1,'wait':3})
网友评论