2011-03-08 63 views
2

我想從魔獸世界的武器庫中讀取一些xml(是的,我就是其中之一) - 諸如this這樣的url返回Firefox中的xml(您需要查看源代碼來查看它),但在其他瀏覽器(例如Chrome)中卻沒有(我不完全明白爲什麼 - 儘管這是擱置)。使用Google App Engine和Python閱讀網站XML

無論如何,我有這個代碼,當我在本地運行應用程序時工作正常,但現在我正在遷移到谷歌應用程序引擎,它不是,我不知道爲什麼。但它似乎無法獲取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() 

我已經簡化了代碼,試圖更好地說明問題。我非常感謝任何幫助。

+0

你可能有一個錯誤信息在管理控制檯的「日誌」頁面的某處。請在SO上發佈。 – 2011-03-08 20:09:21

+0

回溯(最近通話最後): 文件「/Users/colmbrophy/Desktop/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/webapp/__init__.py 「,第515行,在__call__ 文件」/ Users/colmbrophy/Code/Python/Google App Engine/Test/main.py「,第47行,獲取 self.response.out.write(soup.guildheader [」派「]) TypeError:'NoneType'對象不可訂閱 – Colm 2011-03-08 20:16:50

+0

事實上,它沒有找到任何東西,這是爲什麼我認爲它完全無法抓住XML。 – Colm 2011-03-08 20:19:18

回答

0

urllib2.Request在傳遞數據參數時會執行POST。這是服務器期望的或者你需要做一個GET嗎?

此外,現在轉到該URL只是給出了「我們已移動」的消息。

+0

應該提到,如果您查看源代碼,那麼xml就在那裏(至少在Firefox中)。切換到帖子似乎沒有區別。 – Colm 2011-03-08 20:56:55

0

暴雪已將舊軍械庫改爲新的網站佈局和格式。您現在可能需要直接解析HTML。

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 
+0

感謝Piotr我會看看shell並嘗試讓它工作 – Colm 2011-03-08 22:25:54