2017-01-25 2 views
0

ノートブックでこのウェブスクラッパーを実行します。Firefox(selenium - webdriver)を使用してデータを取得します。JavaScriptでデータが作成されるため、実際にFirefoxを開く必要があります。だから私は専用のサーバーがFirefoxを開いてデータを取得できるかどうか疑問に思います。専用のサーバーには表示がないので動作しません。スクリプトははるかに複雑です(よく152行) - 私は動作しないと思う部分だけを貼り付けました。 PostgreSQLへのデータのインポートは、専用サーバでは問題ありません。このpython web-scrapperは専用サーバーで実行できますか?

from selenium import webdriver 
    import time 
    from bs4 import BeautifulSoup 
    import lxml 
    import re 
    import psycopg2 
    import sys 

    driver = webdriver.Firefox() 
    driver.set_window_position(-9999, -9999) 
    driver.get("http://rodos.vsb.cz/Road.aspx?road=D2") 

    time.sleep(20) #waits till the page loads 

    html_source = driver.page_source 
    soup = BeautifulSoup(html_source, 'lxml') 
# finds tags with speed information (km/h) 
for i in (soup.find_all("tspan", {"id" : re.compile("tspan_Label_\w*")})): 
      if re.match("^[0-9]+$", (str(i.getText()))) is not None: 
       if (str(i.parent.get('fill'))) == '#5f5f5f': 
        list1.append(i.getText()) 
+1

あなたはそれが(それがGUIを必要としない)ヘッドレスである代わりのFirefox PhantomJSを使用して考えがありますか? –

+0

^クラウスが示唆しているように、GUI以外のブラウザを使用してリモートサーバでグラフィックスインターフェイスを実行すると、より簡単になる – slezica

+0

ノートブックでPhantomJSを試しましたが、そのページにJavaScript要素が作成されませんでした。たぶん私は何か間違ったことをしました - あなたはPhantomJSがJavaScriptを実行し、JSによって作成された要素をスクラップできることは確かですか? – darude

答えて

1

私は、あなたが探しているかもしれないが pyvirtualdisplayだと思う:

pip install pyvirtualdisplay 

pyvirtualdisplayは、実際には、ブラウザを開くことなく、メモリにお好みのブラウザをエミュレートします。

from pyvirtualdisplay import Display 
from selenium import webdriver 

# Set screen resolution to 1366 x 768 like most 15" laptops 
display = Display(visible=0, size=(1366, 768)) 
display.start() 

# now Firefox will run in a virtual display. 
browser = webdriver.Firefox() 

# Sets the width and height of the current window 
browser.set_window_size(1366, 768) 

# Open the URL 
browser.get('http://rodos.vsb.cz/Road.aspx?road=D2') 

# set timeouts 
browser.set_script_timeout(30) 
browser.set_page_load_timeout(30) # seconds 

time.sleep(20) #waits till the page loads 

    html_source = driver.page_source 
    soup = BeautifulSoup(html_source, 'lxml') 
# finds tags with speed information (km/h) 
for i in (soup.find_all("tspan", {"id" : re.compile("tspan_Label_\w*")})): 
      if re.match("^[0-9]+$", (str(i.getText()))) is not None: 
       if (str(i.parent.get('fill'))) == '#5f5f5f': 
        list1.append(i.getText()) 
関連する問題