背景:我正在使用Scrapy从http://shop.nordstrom.com/c/mens-tshirts
抓取并抓取产品数据。该页面是动态生成的,因此我使用Scrapy-Splash来处理JavaScript。问题是,单击页面底部的“下一步”按钮是进入后续产品页面的唯一方法。如果您复制第2页的网址并将其粘贴到新标签页中,则该网页上没有产品。
为了解决这个问题,我尝试使用Selenium中的.click()
函数导航到下一页,并driver.page_source
提取页面的html。
问题:有没有办法将我提取的html / javascript源传递到Splash(在docker容器内运行),而不是传入url?我已经尝试在我的本地计算机上保存html并传递文件路径,但这会导致502 Bad Gateway,因为Splash会自动将'http://'添加到路径中。
也许有更好的方法来实现我的目标,如果是这样,我愿意接受任何选择。请记住,该解决方案必须适合可扩展性和云部署。谢谢!
答案 0 :(得分:1)
您可以编写一个Splash Lua脚本,该脚本调用splash:set_content而不是接受URL,如下所示:
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
查看tutorial和Lua API overview了解更多信息。您可以像Selenium一样与页面进行交互;并非所有的Selenium助手都可以使用,但基础知识都在那里。