如何将“Python+twill+mechanize”组合部署到“Google App Engine”?

0 投票
2 回答
1114 浏览
提问于 2025-04-16 03:52

我一直在尝试把我的登录名和密码从Python脚本传递到eBay的登录页面。之后我希望这个脚本能在Google App Engine上运行。

有人建议我使用mechanize库。不过,这对我来说并没有成功:


IDLE 1.2.4      
>>> import re
>>> import mechanize
>>> br = mechanize.Browser()
>>> br.open("https://signin.ebay.com")

Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    br.open("https://signin.ebay.com")
  File "build\bdist.win32\egg\mechanize\_mechanize.py", line 203, in open
    return self._mech_open(url, data, timeout=timeout)
  File "build\bdist.win32\egg\mechanize\_mechanize.py", line 255, in _mech_open
    raise response
httperror_seek_wrapper: HTTP Error 403: request disallowed by robots.txt
>>> 

之前我尝试过用Pythontwill,结果也不行,直到有个支持者建议我下载最新版本的mechanize,然后按照以下步骤操作:

  1. 在我的电脑上找到这个文件夹:“C:\Python25\Lib\site-packages\twill\other_packages\_mechanize_dist

  2. 把它的名字改成“_mechanize_dist_backup”(所以完整路径应该是“C:\Python25\Lib\site-packages\twill\other_packages\_mechanize_dist_backup”)

  3. 复制“mechanize”文件夹(这个文件夹在“mechanize-0.2.2”里,就是我从mechanize官网下载并解压的)并粘贴到“C:\Python25\Lib\site-packages\twill\other_packages”里(完整路径就是“C:\Python25\Lib\site-packages\twill\other_packages\mechanize”)

  4. 把它的名字改成“_mechanize_dist”(完整路径是“C:\Python25\Lib\site-packages\twill\other_packages_mechanize_dist”)

  5. 从“_mechanize_dist_backup”里复制“ClientForm”文件,并粘贴到“_mechanize_dist”里(实际上,我发现那里有两个名为“ClientForm”的文件:一个是Python文件,另一个是编译后的Python文件 - 我把这两个都复制粘贴了)。

在我完成这些步骤后,我尝试从Pythontwill命令行登录我的eBay账户,结果成功了!!!我甚至还可以用同样的方法登录我的Yahoo邮箱,查看邮件!

但现在我遇到了一个难题:我不知道怎么把我的脚本部署到“Google App Engine”上。

之前有人建议我,如果我想在App Engine项目中使用第三方库,我只需要在部署应用时把它们包含进去 - 比如对于twill,我只需要把twill文件夹复制到我的应用文件夹里,然后再部署。

但现在我不仅需要把这个twill文件夹作为第三方库包含进去,还要把在“C:\Python25”里做的所有更改(具体是在“C:\Python25\Lib\site-packages\twill\other_packages”)也考虑进去,而我的应用文件夹(也就是我存放脚本的地方,“my_script.py”文件)是在“E”盘。

有没有人能给我一些建议呢?

2 个回答

2

这个错误信息是在告诉你,mechanize这个工具正在遵守网站的robots.txt文件。

如果你想以自动化的方式访问eBay的网站,最好使用他们提供的API。如果你不想用API,自己做一个忽略robots.txt的解决方案,那就别惊讶他们会把你屏蔽,还可能会向谷歌投诉你这个应用发出的自动请求。

2

关于GAE(Google App Engine)部署的问题,@brilliant,看起来你正在处理的代码都是纯Python 2.5的(唯一真正的问题是如果它不是的话——GAE目前不允许使用任何二进制扩展,也不允许使用需要Python 2.6或更高版本的代码,这就是现在的情况)。

所以,在这个假设下,部署代码到App Engine的唯一问题是确保所有代码site-packages文件夹里(因为GAE的dev_appserver.py根本不会从那里部署任何东西),而是放在你的GAE项目目录下(我建议把所有的.py文件打包成一个压缩文件,记得先删除所有的.pyc文件,然后再用zip -r命令打包;-)。

总的来说,这只是几个合适的命令的问题:cp -R然后zip -r(在非Unix系统的命令行上可能会更难,但即使在Windows上,你也可以通过Cygwin的bash来做到……无论如何,这根本不算是一个“开发”问题;-)。

撰写回答