2012-01-10 77 views
13

我的任務是使用Python中的無頭webkit(PyQt4.QtWebkit)來搜索谷歌搜索結果。 該模塊正在使用PyQt4爬行的結果很好。我應該在亞馬遜ec2.So中執行此腳本,所以我應該使用Xvfb(在ec2中沒有x服務器)。xvfb在ubuntu中運行錯誤11.04

同時我模塊的loop.So執行,這是工作的罰款對一些iterations.After一些循環模塊運行到「xvfb的運行:錯誤:Xvfb來未能啓動」

它應該如何解決?

這是我的循環:

for i in range(10): 
    try: 
     query_dict["start"] = i * 10 
     url = base_url + ue(query_dict) 
     flag = True 
     while flag: 
      parsed_dict = main(url) 
      time.sleep(8.4) 
      flag = False 
    except: 
     pass 

主(URL):

def main(url): 
    cmd = "xvfb-run python /home/shan/temp/hg_intcen/lib/webpage_scrapper.py"+" "+str(url) 
    print "Cmd EXE:"+ cmd 
    proc = subprocess.Popen(cmd,shell=True,stdin=subprocess.PIPE,stdout=subprocess.PIPE) 
    proc.wait() 
    sys.stdout.flush() 
    result = proc.stdout.readlines() 
    print "crawled: ",result[1] 
    return result 

webpage_scrapper將使用PyQt4中獲取所有的HTML結果。 如何避免xvfb循環失敗?

+0

我使用的Amazon EC2服務器實例 – Nava 2012-01-10 14:41:16

回答

27

您需要爲xvfb-run添加--auto-servernum參數。否則,它會嘗試在同一顯示屏上產生Xvfb(默認爲:99),如果您已經有一臺顯示器運行,將會失敗。

10

像這樣運行,

xvfb-run --auto-servernum --server-num=1 python webpage_scrapper.py http://google.com 
+0

這個偉大工程。 – Jim 2014-04-30 15:50:41

+0

我很驚訝這個作品...你傳遞衝突的參數:'--auto-Servernum'告訴用戶一個免費的顯示器,'--server-num = 1'告訴是使用顯示器1 ....根據您的需要使用一個或另一個參數。 – 2016-01-09 04:29:57