如何使用谷歌应用引擎python沙箱内的斜纹连接到网站?

时间:2014-09-12 02:51:27

标签: python google-app-engine twill

这允许我在我的计算机上使用python连接到一个网站:

from twill.commands import go, show, showforms, formclear, fv, submit

from bs4 import BeautifulSoup as bs

go('http://www.pge.com')
showforms()

这让我在谷歌应用引擎上打招呼世界,斜纹和美丽的汤进口工作:

import webapp2
import sys
sys.path.insert(0, 'libs')
from twill.commands import go, show, showforms, formclear, fv, submit
from bs4 import BeautifulSoup as bs

class MainPage(webapp2.RequestHandler):
    def get(self):
        self.response.headers['Content-Type'] = 'text/plain'
        self.response.write('Hello, World!  I love dog food.')

application = webapp2.WSGIApplication([
    ('/', MainPage),
], debug=True)

现在在此之后我尝试使用斜纹连接到网站并失败:

我可以在哪里调用go()来连接网站?

如果我在class MainPage(webapp2.RequestHandler):之前添加它,它会挂起并且我没有进入hello world。

如果我在第一行的MainPage类中将其添加为getit = go('http://www.pge.com'),或仅添加go('http://www.pge.com'),它也会挂起并且我没有进入hello world。

如果我在def: get(self):内添加,我会得到:

  

内部服务器错误

     

服务器出错或无法执行   要求的操作。   和一堆关于斜纹和mechanize.py的东西,然后是

File "..../twill/utils.py", line 275, in run_tidy process = subprocess.Popen(_tidy_cmd, stdin=subprocess.PIPE, AttributeError: 'module' object has no attribute 'Popen'

我在某种程度上错过了一些其他的依赖项,比如mechanize.py?或者我还需要做些什么吗?

1 个答案:

答案 0 :(得分:0)

这有助于部分解决我的问题,但稍后会出现其他问题,特别是在填写表单,提交表单以及在网站中进一步迁移时。

import webapp2
import sys
sys.path.insert(0, 'libs')
from twill.commands import go, show, showforms, formclear, fv, submit, config
from twill.browser import *
from bs4 import BeautifulSoup as bs


class MainPage(webapp2.RequestHandler):
    config('use_tidy', '0')
    def get(self):
        go('http://www.pge.com')

        self.response.headers['Content-Type'] = 'text/plain'
        self.response.write('Hello, World!  I love dog food.')
        self.response.write(show())
以这种方式禁用了整洁(整理与谷歌沙箱不一致),我可以通过self.response.write(show())显示()网页。

作为旁注:在使用谷歌应用引擎时,请注意使用TextEdit编辑.py文件。我得到了各种奇怪的非ascii字符错误。我将# - - 编码:utf-8 - 添加到python文件的第一行,这有点帮助,并切换到使用pycharm的ide,这确实有帮助。

twill在谷歌应用引擎的沙盒中给了我各种各样的问题,我没有在我的系统上。我最终可以获得一个网页的html,但不能像我在我的系统上那样提交表单。 showforms()甚至没有显示表单,也许是因为我禁用整洁并且html没有被正确解析?

我认为在这里前进的一种方法是在斜纹里面工作。很明显,路障被打到了#34;在引擎盖下#34;它们很难让我看到。

似乎twill是一个高级抽象,现在在谷歌应用引擎上使用可能不是一个好主意。接下来我会尝试切换到mechanize.py,或者寻找另一个沙箱,也许是亚马逊?