Могу ли я использовать Beautiful Soup для получения XML-файла из Интернета, который отображается с использованием HTML?

#python #html #xml #beautifulsoup

#python #HTML #xml #beautifulsoup

Вопрос:

Здесь у меня есть URL-адрес, содержащий содержимое XML-файла, но технически это не XML-файл сам по себе:http://auxopsweb2.oit.nd.edu/DiningMenus/api/Menus/46

Я хотел использовать библиотеку Beautiful Soup в python, чтобы попытаться извлечь некоторые данные из содержимого XML. Однако я знаю только, как извлекать данные в виде HTML, который отображает страницу:

 import requests
from bs4 import BeautifulSoup as bs

res = requests.get("http://auxopsweb2.oit.nd.edu/DiningMenus/api/Menus/46")
res.raise_for_status()
soup = bs(res.text , 'html.parser')
  

Это затрудняет поиск, поскольку все данные на самом деле являются немаркированными <span> элементами. Есть ли способ обойти HTML и просто извлечь прямое содержимое XML? Я никогда раньше не работал с BeautifulSoup, поэтому извините, если мой вопрос невежествен. Спасибо.

Ответ №1:

Другой метод.

 from simplified_scrapy import SimplifiedDoc, req
url = 'http://auxopsweb2.oit.nd.edu/DiningMenus/api/Menus/46'
html = req.get(url)
doc = SimplifiedDoc(html)
MenuCourses = doc.selects('ServiceMenu').selects('MenuCourse')
print(MenuCourses.Name.text)
  

Вот еще примеры:https://github.com/yiyedata/simplified-scrapy-demo/tree/master/doc_examples

Ответ №2:

ниже (вы получаете данные в формате json и работаете с dict)

 import requests
import pprint

r = requests.get('http://auxopsweb2.oit.nd.edu/DiningMenus/api/Menus/46')
if r.status_code == 200:
    data = r.json()
    pprint.pprint(data)
else:
    print('Failed to read data: {}'.format(r.status_code))