13

我的任务是在 python 中使用 headless webkit(PyQt4.QtWebkit) 抓取谷歌搜索结果。该模块使用 PyQt4 很好地抓取了结果。我应该在亚马逊 ec2 中执行这个脚本。所以,我应该使用Xvfb(ec2 中没有 x 服务器)。

同时我的模块必须在循环中执行。所以,它在一些迭代中工作正常。在一些循环模块运行到“xvfb-run:错误: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

主要(网址):

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

pages_scrapper 将使用 pyqt4 获取所有 html 结果。如何避免 xvfb 循环失败?

4

2 回答 2

27

您需要--auto-servernumxvfb-run. 否则,它会尝试Xvfb在同一显示器上生成(默认情况下:99),如果您已经运行了一个显示器,这将失败。

于 2012-01-16T13:32:37.257 回答
10

这样跑,

xvfb-run --auto-servernum --server-num=1 python webpage_scrapper.py http://google.com
于 2012-02-06T19:37:59.713 回答