Python Mechanize + GAE的代码
我知道之前有一些关于 mechanize 和 Google App Engine 的问题, 比如 我应该使用哪个纯 Python 库来抓取网站? 和 Mechanize 和 Google App Engine。
另外,这里有一些代码 在这里,但我在应用引擎上无法运行,出现了
File “D:\data\eclipse-php\testpy4\src\mechanize\_http.py”, line 43, in socket._fileobject(”fake socket”, close=True)
File “C:\Program Files (x86)\Google\google_appengine\google\appengine\dist\socket.py”, line 42, in _fileobject
fp.fileno = lambda: None
AttributeError: ’str’ object has no attribute ‘fileno’
INFO 2009-12-14 09:37:50,405 dev_appserver.py:3178] “GET / HTTP/1.1″ 500 -
有没有人愿意分享一下他们能在 mechanize 和 appengine 上工作的代码呢?
3 个回答
0
我把gaemechanize项目的源代码上传到了一个新项目里:http://code.google.com/p/gaemechanize2/
请注意一些常规的警告。
1
我成功地在GAE上运行了mechanize代码,非常感谢MStodd,来自GAEMechanize项目 http://code.google.com/p/gaemechanize/。
如果有人需要这段代码,可以联系MStodd!
附言:这段代码不在谷歌代码上,所以你得联系拥有者。
祝好,
don
10
我解决了这个问题,只需要修改一下 mechanize._http.py 文件,大约在第 43 行,
try:
socket._fileobject("fake socket", close=True)
except TypeError:
# python <= 2.4
create_readline_wrapper = socket._fileobject
else:
def create_readline_wrapper(fh):
return socket._fileobject(fh, close=True)
改成:
try:
# fixed start -- fixed for gae
class x:
pass
# the x should be an object, not a string,
# This is the key
socket._fileobject(x, close=True)
# fixed ended
except TypeError:
# python <= 2.4
create_readline_wrapper = socket._fileobject
else:
def create_readline_wrapper(fh):
return socket._fileobject(fh, close=True)