在Ubuntu 11.04中运行xvfb时出错
我的任务是用无头的网页浏览器(PyQt4.QtWebkit)在Python中抓取谷歌搜索结果。这个模块在使用PyQt4时抓取结果很顺利。不过,我需要在亚马逊的EC2服务器上运行这个脚本。所以,我需要使用Xvfb(因为EC2上没有图形界面服务器)。
同时,我的模块需要在一个循环中执行。最开始运行得很好,但经过几次循环后,模块就出现了"xvfb-run: error: Xvfb failed to start"的错误。
这个问题该怎么解决呢?
这是我的循环代码:
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
main(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启动失败的情况吗?
2 个回答
10
这样运行:
xvfb-run --auto-servernum --server-num=1 python webpage_scrapper.py http://google.com
27
你需要给 xvfb-run
加上 --auto-servernum
这个参数。否则,它会试图在同一个显示器上启动 Xvfb
(默认是 :99
),如果你已经有一个在运行的话,这样就会失败。