使用Google App Engine和Python读取网站XML
我正在尝试从《魔兽世界》军团的数据库读取一些xml数据(没错,我就是那种人)——像这样的链接 这个 在Firefox浏览器中可以返回xml数据(你需要查看源代码才能看到),但在其他浏览器,比如Chrome中却不能(我也不太明白为什么——不过这不是重点)。
总之,我有一段代码,在我本地运行应用时一切正常,但现在我正在迁移到Google App Engine上,它却不工作了,我也不知道为什么。看起来它无法获取xml数据。我在完整代码中使用了Beautiful Soup来解析xml。
import urllib2,urllib
import socket
from BeautifulSoup import BeautifulStoneSoup
class Object:
def __init__(self):
self.data = {}
self.userAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-GB; rv:1.8.1.4) Gecko/20070515 Firefox/2.0.0.4"
def _getXml(self):
strFile = ""
try:
url = "http://eu.wowarmory.com/guild-info.xml?r=dentarg&n=penance"
values = {}
headers = { 'User-Agent' : self.userAgent }
data = urllib.urlencode(values)
socket.setdefaulttimeout(2)
req = urllib2.Request(url, data, headers)
response = urllib2.urlopen(req)
strFile = response.read()
except Exception, e:
raise e
finally:
return strFile
def getObject(self):
soup = BeautifulStoneSoup( self._getXml() )
return soup.guildheader["faction"]
这是主要的代码部分:
from google.appengine.ext import webapp
from google.appengine.ext.webapp import util
from library import Object
class MainHandler(webapp.RequestHandler):
def get(self):
test = Object().getObject()
self.response.out.write(test)
def main():
application = webapp.WSGIApplication([('/', MainHandler)],
debug=True)
util.run_wsgi_app(application)
if __name__ == '__main__':
main()
我简化了代码,以便更好地说明问题。如果有人能帮我,我将非常感激。
3 个回答
0
暴雪公司把以前的角色信息网站改成了一个新的样式和格式。现在你可能需要直接解析HTML代码了。
0
urllib2.Request
这个东西在你传入数据的时候,会发送一个POST请求。你要搞清楚服务器是不是期待这个请求,还是说你需要发送一个GET请求呢?
另外,现在访问那个网址会显示“我们已经搬家了”的信息。
1
好的,我在http://shell.appspot.com/上玩了一下(顺便说一下,你可以下载源代码,把它整合到你的项目里进行更多实验),这似乎能解决问题:
headers = { 'User-Agent' : ""Mozilla/5.0 (Windows; U; Windows NT 5.0; en-GB; rv:1.8.1.4) Gecko/20070515 Firefox/2.0.0.4" }
resp = urlfetch.fetch(url="http://eu.wowarmory.com/guild-info.xml?r=dentarg&n=penance", method=urlfetch.GET, headers= headers)
print resp.content