【问题标题】:How to use scrapy to crawl angularjs websites?如何使用scrapy爬取angularjs网站?
【发布时间】:2018-05-05 00:03:38
【问题描述】:

我需要一种方法来获取博彩公司所有赛事的所有赔率

我正在使用 Scrapy+Splash 来获取网站的第一个 javascript 加载内容。但要获得所有其他赔率,我必须点击“Spagna-LigaSpagnola”、“Italia->Serie A”等。

我该怎么做?

【问题讨论】:

    标签: python web-scraping scrapy screen-scraping scrapy-spider


    【解决方案1】:

    您可以通过编写 JavaScript 脚本和通过告诉 Splash 在呈现您的页面时执行该脚本。

    一个小例子:

    您定义了一个 JavaScript 函数,它选择页面中的一个元素,然后点击它:

    (来源:splash doc

      -- Get button element dimensions with javascript and perform mouse click.
    _script = """
    function main(splash)
        assert(splash:go(splash.args.url))
        local get_dimensions = splash:jsfunc([[
            function () {
                var rect = document.getElementById('button').getClientRects()[0];
                return {"x": rect.left, "y": rect.top}
            }
        ]])
        splash:set_viewport_full()
        splash:wait(0.1)
        local dimensions = get_dimensions()
        splash:mouse_click(dimensions.x, dimensions.y)
    
        -- Wait split second to allow event to propagate.
        splash:wait(0.1)
        return splash:html()
    end
    """
    

    然后,当您request 时,您修改endpoint 并将其设置为"execute",并将"lua_script": _script 添加到args

    def parse(self, response):
        yield SplashRequest(response.url, self.parse_elem,
                            endpoint="execute",
                            args={"lua_source": _script})
    

    你会发现所有关于splash scripting的信息here

    【讨论】:

    • 看起来很棒。有没有办法以这种方式选择并单击按钮: document.querySelectorAll(".list-group > a.list-group-item")[0].click(); ?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多