0

私は Python と GAE に非常に慣れていませんが、eventful.com API (XML) から XML ファイルをダウンロードして解析し、この情報を Google Cloud SQL のデータベースに保存しようとしています。

これまでのコードは次のとおりで、さまざまなオンライン チュートリアルを参照して作成できましたが、多くのエラーが発生し続け、コードがまったく機能しません。私がどこで間違っているかについて何か指摘があれば、教えてください、カレン。

イベントフルxmlファイルを呼び出して解析しようとする私の試み:

import webapp2
from google.appengine.ext.webapp import template
import os
import datetime
from google.appengine.ext import db
from google.appengine.api import urlfetch
import urllib #import python library which does http requests
from xml.dom import parseString #imports xml parser called minidom

class XMLParser(webapp2.RequestHandler):
    def get(self):
        base_url = fetch('http://api.eventful.com/rest/events/search?app_key=zGtDX6cwQ=dublin&?q=music')
        #downloads data from xml file
        response = urllib.urlopen(base_url)
        #converts data to string:
        data = response.read()
        #closes file
        response.close()
        #parses xml downloaded
        dom = parseString(data)
        #retrieves the first xml tag that the parser finds with name tag
        xmlTag = dom.getElementsByTagName('title')[0].toxml()
        #strip off the tag to just reveal event name
        xmlData = xmlTag.replace('<title>', '').replace('</title>', '')
        #print out the xml tag and data in this format:
        print xmlTag
        #just print the data
        print xmlData

このコードを実行しようとすると次のエラーが表示されますが、Google App Engine ユーザーでは GAE ランチャー -

2013-04-15 16:52:05 Running command: "['C:\\Python27\\python.exe', 'C:\\Program Files     (x86)\\Google\\google_appengine\\dev_appserver.py', '--skip_sdk_update_check=yes', '--port=8080', '--admin_port=8002', u'C:\\Users\\Karen\\Desktop\\Development\\own_tada']"
INFO     2013-04-15 16:52:17,944 devappserver2.py:498] Skipping SDK update check.
WARNING  2013-04-15 16:52:18,005 api_server.py:328] Could not initialize images API;     you are likely missing the Python "PIL" module.
INFO     2013-04-15 16:52:18,065 api_server.py:152] Starting API server at:      http://localhost:54619
INFO     2013-04-15 16:52:18,085 dispatcher.py:150] Starting server "default" running     at: http://localhost:8080
INFO     2013-04-15 16:52:18,095 admin_server.py:117] Starting admin server at: http://localhost:8002
ERROR    2013-04-15 15:52:35,767 wsgi.py:219] 
Traceback (most recent call last):
  File "C:\Program Files (x86)\Google\google_appengine\google\appengine\runtime\wsgi.py", line 196, in Handle
    handler = _config_handle.add_wsgi_middleware(self._LoadHandler())
  File "C:\Program Files (x86)\Google\google_appengine\google\appengine\runtime\wsgi.py", line 255, in _LoadHandler
    handler = __import__(path[0])
  File "C:\Users\Karen\Desktop\Development\own_tada\own.py", line 8, in <module>
    from xml.dom import parseString #imports xml parser called minidom
ImportError: cannot import name parseString
INFO     2013-04-15 16:52:35,822 server.py:561] default: "GET / HTTP/1.1" 500 -
ERROR    2013-04-15 15:52:37,586 wsgi.py:219] 
Traceback (most recent call last):
  File "C:\Program Files (x86)\Google\google_appengine\google\appengine\runtime\wsgi.py", line 196, in Handle
    handler = _config_handle.add_wsgi_middleware(self._LoadHandler())
  File "C:\Program Files (x86)\Google\google_appengine\google\appengine\runtime\wsgi.py", line 255, in _LoadHandler
    handler = __import__(path[0])
  File "C:\Users\Karen\Desktop\Development\own_tada\own.py", line 8, in <module>
    from xml.dom import parseString #imports xml parser called minidom
 ImportError: cannot import name parseString
INFO     2013-04-15 16:52:37,617 server.py:561] default: "GET /favicon.ico HTTP/1.1" 500 -

上記のコードに使用したそのようなチュートリアルの 1 つは、次の URL からのものです

編集:

以下の Josh が提供するヘルプのおかげで、コードを使用してコードを起動してもエラーが発生しなくなりましたが、空白の画面しか表示されず、解析された情報 (またはこれまでの進行状況) を出力したいと考えています。これは非常にばかげた質問のように思えるかもしれませんが、私は本当に初心者なので、申し訳ありません! 修正コード (エラーを除く) は次のとおりです。

import webapp2
from google.appengine.ext.webapp import template
import os
import datetime
from google.appengine.ext import db
from google.appengine.api import urlfetch
import urllib #import python library which does http requests
import xml.dom.minidom as mdom #imports xml parser called minidom

class XMLParser(webapp2.RequestHandler):
    def get(self):
    base_url = 'http://api.eventful.com/rest/events/search?app_key=zGtDX6cwQjCRdkf6&l=dublin&?q=music'
    #downloads data from xml file
    response = urllib.urlopen(base_url)
    #converts data to string:
    data = response.read()
    #closes file
    response.close()
    #parses xml downloaded
    dom = mdom.parseString(data)
    #retrieves the first xml tag that the parser finds with name tag
    xmlTag = dom.getElementsByTagName('title')[0].toxml()
    #strip off the tag to just reveal event name
    xmlData = xmlTag.replace('<title>', '').replace('</title>', '')
    #print out the xml tag and data in this format:
    print xmlTag
    #just print the data
    print xmlData

app = webapp2.WSGIApplication([('/', XMLParser), 
                          ],
                          debug=True)

次に何をすべきかについてのガイドラインをいただければ幸いです。または、Python コードに問題があることを見つけていただければ幸いです。ありがとうございます。

4

2 に答える 2

2

Appengine はlxmlをサポートしているため、lxml を含めてドキュメントを解析するのは非常に簡単です。

app.yaml ファイル内

libraries:
    - name: lxml
    - version: latest

そして、解析の指示import lxmlに従います

于 2013-04-16T12:41:56.470 に答える
1

これでインポートが修正されるはずです

import xml.dom.minidom as mdom

生を次のように解析します。

dom = mdom.parseString(data)

データ操作に関しては、parseString から返された子ノードとデータ要素を調べる必要があります。

そのような:

for element in dom.getElementsByTagName('title')[0].childnodes:
    print element.data

解析された構造を確認するには。

于 2013-04-15T16:15:06.620 に答える