如何使用scrapy来抓取angularjs网站?

时间:2017-11-21 13:40:29

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

我需要一种方法来获取博彩公司所有事件的所有可能性

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

我该怎么做?

1 个答案:

答案 0 :(得分: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})

您会找到有关启动脚本 here

的所有信息