2012-01-10 79 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