1

背景:我正在使用 Scrapy 从http://shop.nordstrom.com/c/mens-tshirts. 该页面是动态生成的,所以我使用 Scrapy-Splash 来处理 JavaScript。问题是,点击页面底部的“下一步”按钮是进入后续产品页面的唯一途径。如果您复制第 2 页的 url 并将其粘贴到新选项卡中,则该页面上没有产品。

为了解决这个问题,我尝试使用.click()Selenium 中的功能导航到下一页,并driver.page_source提取页面的 html。

问题:有没有办法将我提取的 html/javascript 源代码传递给 Splash(在 docker 容器内运行),而不是传入 url?我尝试将 html 保存在本地计算机上并传递文件路径,但这会导致 502 Bad Gateway,因为 Splash 会自动在路径前添加“http://”。

也许有更好的方法可以在这里实现我的目标,如果是这样,我愿意接受任何选择。请记住,该解决方案必须适合可扩展性和云部署。谢谢!

4

1 回答 1

1

你可以编写一个调用splash:set_content而不是接受 URL 的 Splash Lua 脚本,如下所示:

function main(splash, args)
    assert(splash:set_content(args.html_source))
    -- page is loaded, process it as needed
end

您还可以单击 Splash 本身中的按钮 - 请参阅element:mouse_click,如下所示:

function main(splash, args)
    assert(splash:go(args.url))
    splash:select('.next'):mouse_click()
    splash:wait(5.0) 
    return splash:html()
end

查看教程Lua API 概述了解更多信息。您可以像在 Selenium 中那样与页面进行交互;并非所有 Selenium 助手都可用,但基础知识都在那里。

于 2017-07-20T20:31:25.647 回答