#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))