Python парсинг XML прямо с веб-адреса - PullRequest
2 голосов
/ 18 марта 2011

Эй. Я пытался найти способ, но я не могу. Я установил парсер xml.sax в python, и он отлично работает, когда я читаю локальный файл (например, calendar.xml), но мне нужно прочитать файл xml с веб-адреса.

Я подумал, что это сработает, если я сделаю это:

toursxml='http://api.songkick.com/api/3.0/artists/mbid:'+mbid+'/calendar.xml?apikey=---------'
toursurl=urllib2.urlopen(toursxml)
toursurl=toursurl.read()
parser.parse(toursurl)

но это не так. Я уверен, что есть простой способ, но я не могу найти его.

так что да, я могу легко перейти к URL, скачать файл и открыть его, выполнив

parser.parse("calendar.xml")

как обходной путь, я настроил его на чтение файла и создание файла локально, закрытие файла, а затем его чтение. Но, как вы можете догадаться, это медленно, как ад.

Есть ли кто-нибудь, чтобы непосредственно прочитать xml? также обратите внимание, что имя URL-адреса не заканчивается на «.xml», что может стать проблемой позже

Ответы [ 2 ]

3 голосов
/ 18 марта 2011

Во-первых, ваш пример перепутан.Пожалуйста, не используйте переменные.

toursurl= urllib2.urlopen(toursxml)
toursurl_string= toursurl.read()
parser.parseString( toursurl_string )

Считывает весь файл в строку с именем toursurl_string.

. Для анализа строки вы используете метод parseString(toursurl_string).

http://docs.python.org/library/xml.sax.html#xml.sax.parseString

Если вы хотите объединить чтение и синтаксический анализ, вы должны передать «поток» или имя файла для анализа.

toursurl= urllib2.urlopen(toursxml)
parser.parse(toursurl)
2 голосов
/ 18 марта 2011
parser.parse(xyz)

ожидает, что xyz будет файлом; Вы ищете

parser.parseString(xyz)

, которая ожидает, что xyz будет строкой, содержащей XML.

...