Skip to main content
 首页 » 编程设计

python之使用 Google App Engine 和 Python 读取网站 XML

2025年05月04日24sharpest

我正在尝试从魔兽世界军械库中读取一些 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