我正在清理一些似乎对它有很好保护的网站。我能让它发挥作用的唯一方法是使用Selenium加载页面,然后从中清理内容。
目前,这在我的本地计算机上运行(当我访问我的页面时,一个firefox窗口打开和关闭,它的HTML在我的脚本中进一步处理)。然而,我需要我的刮刀可以在网上访问。刮刀嵌入Heroku上的Flask应用程序中。有没有办法让Selenium浏览器在Heroku服务器上运行?或者有任何托管提供商可以工作吗?
Heroku虽然很棒,但是有一个很大的限制,那就是不能使用定制软件,或者在很多情况下不能使用库。在提供易于使用、集中控制、可管理的堆栈时,Heroku将其服务器剥离以防止其他用途。
这归结为Heroku dyno上没有Xorg。缺乏Xorg和安装自定义软件的能力意味着没有xvfb,也没有运行selenium期望存在的浏览器的能力。此外,浏览器通常不可用。
使用像AWS这样的云产品,你会有更好的运气,在那里你可以安装自定义软件,包括Firefox,xvfb(以防止需要所有的Xorg开销),当然还有抓取堆栈的其余部分。这个答案解释了如何正确地做到这一点。
有构建包可以让硒在heroku上工作。
添加以下构建包。
1) heroku buildpacks:add https://github.com/kevinsawicki/heroku-buildpack-xvfb-google-chrome/
2) heroku buildpacks:add https://github.com/heroku/heroku-buildpack-chromedriver
并将heroku stack设置为cedar-14,如下所示,因为xvfb buildpack只适用于cedar-14。
heroku stack:set cedar-14 -a stocksdata
然后指向谷歌浏览器的位置,如下所示
options = ChromeOptions()
options.binary_location = "/app/.apt/usr/bin/google-chrome-stable"
driver = webdriver.Chrome(chrome_options=options)