Scrapy-splash-lua_script中的splash:go(url)是否再次执行GET请求? - javascript

我是Scrapy-splash的新手,我正在尝试抓取一个带有AJAX分页的表格的懒惰datatable

因此,我需要加载网站,等待执行JS,获取表格的html,然后在分页中单击“下一步”按钮。

我的方法可行,但恐怕我要两次访问该网站。

第一次生成SplashRequest时,然后执行lua_script时。

是真的吗如果是,如何使其仅执行一次请求?

class JSSpider(scrapy.Spider):
    name = 'js_spider'
    script = """
    function main(splash, args)
        splash:go(args.url)
        splash:wait(0.5)
        local page_one = splash:evaljs("$('#example').html()")
        splash:evaljs("$('#example_next').click()")
        splash:wait(2)
        local page_two = splash:evaljs("$('#example').html()")
        return {page_one=page_one,page_two=page_two}
    end"""

    def start_requests(self):
        url = f"""https://datatables.net/examples/server_side/defer_loading.html"""
        yield SplashRequest(url, endpoint='execute',callback=self.parse, args={'wait': 0.5,'lua_source':self.script,'url':url})

    def parse(self, response):
        # assert isinstance(response, SplashTextResponse)
        page_one = response.data.get('page_one',None)
        page_one_root = etree.fromstring(page_one, HTMLParser())
        page_two = response.data.get('page_two',None)
        page_two_root = etree.fromstring(page_one, HTMLParser())

编辑

我也想等到AJAX表现出比splash:wait(2)更好的方式。是否可以以某种方式等待表更改?理想情况下,需要超时。

参考方案

Lua脚本非常文字化-如果您有1个splash:go,则1个启动程序会发出一个请求。
您的履带在这里很好。

毫无疑问,您的蜘蛛会通过http连接到工作人员,因此理论上提出了两个请求:第一个请求启动服务,第二个请求启动程序目标。

启动画面不会显示整个页面 - javascript

我首先使用以下命令在docker上运行splashdocker run -p 8050:8050 scrapinghub/splash 当我转到端口8050并尝试渲染时: http://warframe.market/它不会渲染身体。更具体地说,在<section id="warframe_react"><section…

Javascript-从当前网址中删除查询字符串 - javascript

单击提交按钮后,我需要从网址中删除查询字符串值。我可以用jQuery做到这一点吗?当前网址:siteUrl/page.php?key=value 页面提交后:siteUrl/page.php 实际上,我已经从另一个带有查询字符串的页面着陆到当前页面。我需要在页面首次加载时查询字符串值以预填充一些详细信息。但是,一旦我提交了表格,我就需要删除查询字符串值。我已…

使用scrapy,如何使用具有onclick属性的复选框对页面进行爬网? - javascript

我正在使用Scrapy从网页中抓取一些数据。该页面具有一个包含多个复选框和下拉菜单的表单,需要选中所有这些复选框以生成数据表。所有复选框都具有调用javascript代码的onClick属性,并且它们处于层次结构中,即有5个主要复选框,每个复选框都包含7个作为子类别的复选框,依此类推。复选框具有4个级别的树结构。这是最低级别(叶)复选框之一:<inpu…

如何通过URL防止XSS? - javascript

我熟悉通常的持久性XSS,在这种情况下,来自用户输入的内容应在通往模板(html实体)的途中进行转义。最近,我遇到了一个非持久性的问题,用户可以在URL上的脚本中发送该URL,而该URL则显示在页面的某处。就我而言,这是一个链接标记。因此,我有以下使用当前URL的链接标记。<link rel="next" href="{c…

当PHP获取字符串在当前URL中时如何重定向URL - javascript

这是我的HTML按钮:<button class="button-brightgreen" onclick="cancelbutton();">Cancel</button> 这是我的JavaScript重定向:function cancelbutton() { var cancelURL = …