我正在尝试从魔兽世界军械库中读取一些 xml(是的,我就是其中之一)- url 例如 this在 Firefox 中返回 xml(您需要查看源代码才能看到它),但在其他浏览器(例如 Chrome)中不返回(我不完全理解为什么 - 尽管这是一个旁白)。
无论如何,当我在本地运行该应用程序时,我有这段代码可以正常工作,但现在我正在迁移到 Google App Engine,但我不知道为什么。但它似乎无法获取 xml。我使用 Beautiful Coup 来解析完整代码中的 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()
我已简化代码以尝试更好地说明问题。如果有任何帮助,我将不胜感激。
请您参考如下方法:
好的,我玩过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
