2013-04-09 119 views
11

我在刮一些似乎對它有很好保護的網站。唯一可以實現它的方法是使用Selenium加載頁面,然後從中提取內容。在服務器上運行硒瀏覽器(Flask/Python/Heroku)

目前這項工作在我的本地計算機上(當我訪問我的頁面時,Firefox窗口打開並關閉,並且HTML在我的腳本中進一步處理)。但是,我需要我的刮板可以在網絡上訪問。刮板嵌入在Heroku的Flask應用程序中。有沒有辦法讓Selenium瀏覽器在Heroku服務器上工作?還是有任何託管服務提供商可以工作?

回答

11

Heroku雖然精彩,但它的主要限制在於不能使用自定義軟件或許多情況下的庫。在提供一個易於使用的,集中控制的託管堆棧的情況下,Heroku將其服務器剝離以防止其他用途。

這可歸結爲在Heroku測功機上沒有Xorg。缺乏Xorg和缺乏安裝定製軟件的能力意味着無法使用xvfb,也無法運行硒預期存在的瀏覽器。而且,瀏覽器通常不可用。

您將擁有像AWS這樣的雲提供更好的運氣,您可以在其中安裝自定義軟件,包括firefox,xvfb(以免需要所有Xorg開銷),當然還有其他堆棧。 This answer解釋瞭如何正確地做到這一點。

1

有構建包使selenium在heroku上工作。

添加以下buildpack。

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上堆到雪松-14,如下所示,如xvfb的buildpack僅與雪松-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) 
相關問題