xml.parsers.expat.ExpatError при разборе XML

Я пытался получить информацию через HTTP-запросы, например

http://www.opencellid.org/cell/get?key=xxxxxxxxxxxx&mnc=1&mcc=228&lac=101&cellid=7283

возвращает мне ответ в формате XML, например

<rsp stat="ok">
<cell nbSamples="1" mnc="1" lac="101" lat="46.52079" lon="6.56676" cellId="7283" mcc="228" range="6000"/>
</rsp>

Я попытался использовать модули response и urllib, чтобы открыть URL-адрес, а затем проанализировать с помощью elementtree.ElementTree.

Фрагмент кода:

url = 'http://www.opencellid.org/cell/get?key=xxxxxxxxxx&mnc=1&mcc=228&lac=101&cellid=7283 '
rss = parse(requests.get(url = url)).getroot()
pprint(rss)

Однако я получаю следующую ошибку:

xml.parsers.expat.ExpatError: junk after document element: line 5, column 0

Просто распечатав ответ, вы получите HTML-код успеха. Пожалуйста, помогите!


person Arun    schedule 21.06.2011    source источник
comment
Откуда берется модуль запросов (объект?)? Можете ли вы расширить фрагмент кода, чтобы также указать модули, которые вы импортируете?   -  person Ioan Alexandru Cucu    schedule 21.06.2011
comment
запросы на импорт, из pprint import pprint, из elementtree.ElementTree import parse   -  person Arun    schedule 21.06.2011


Ответы (2)


Вы забыли вызвать содержимое объекта ответа. Вот как вы получаете фактический xml.

content = requests.get(url = url).content
rss = parse(content).getroot()
person Ioan Alexandru Cucu    schedule 21.06.2011
comment
Спасибо. Теперь я могу, по крайней мере, распечатать содержимое, однако у парсера есть другие проблемы: | Но я думаю, что скоро справлюсь с этим. Файл /usr/local/lib/python2.6/dist-packages/elementtree/ElementTree.py, строка 859, в разборе tree.parse(source, parser) Файл /usr/local/lib/python2.6/dist-packages /elementtree/ElementTree.py, строка 576, в синтаксическом анализе source = open(source, rb) IOError: [Errno 2] Нет такого файла или каталога: - person Arun; 21.06.2011
comment
Похоже, что синтаксический анализ ожидает файл, а не строку. Вы должны либо поискать другой метод, либо сделать что-то вроде: import StringIO; rss = синтаксический анализ (StringIO.StringIO (содержимое)). Getroot () - person Ioan Alexandru Cucu; 21.06.2011
comment
Большое спасибо ! Отлично работает при использовании BeautifulSoup вместо elementtree. - person Arun; 21.06.2011

Первое, что я бы посоветовал, это сохранить текстовый файл только с содержимым xml:

 <rsp stat="ok">
    <cell nbSamples="1" mnc="1" lac="101" lat="46.52079" lon="6.56676" cellId="7283" mcc="228" range="6000"/>
 </rsp>

просто убедитесь, что в конце нет завершающих символов. Затем проверьте, работает ли синтаксический анализ. Если это так, то вы знаете, что это проблема со связью, а затем вам нужно выяснить, как «очистить» то, что вы получаете.

Удачи!

person rafalotufo    schedule 21.06.2011
comment
Как именно я могу это сделать? Этот pprint(requests.get(url = url)) печатает код ответа HTML. - person Arun; 21.06.2011