BS4 получает переменные XML-тега

#python #xml #python-3.x #beautifulsoup

#python #xml #python-3.x #beautifulsoup

Вопрос:

Я играю с веб-очисткой, используя bs4, и пытаюсь получить заголовок и цветовой тег из этой строки xml <graph gid="1" color="#000000" balloon_color="#000000" title="Approve">

Выходной результат будет указывать что-то вроде {'title':'approve', 'color':'#000000'}

Страница, на которой находится xml, находится здесь

Я уже написал эту функцию, которая ни в коем случае не является эффективной, но хотел бы, чтобы заголовки моего фрейма данных были результатом title , а не введенного вручную значения. Таким образом, вместо GID1 того, чтобы он читал Approve или Obama или независимо от результата title .

 def rcp_poll_data(xml):
    soup=bs(xml,"xml")
    dates = soup.find('series')
    datesval = dates.findChildren(string=True)
    del datesval[-7:]
    obama = soup.find('graph', { "gid" : "1" })
    obamaval = obama.findChildren(string=True)
    romney = soup.find('graph', { "gid" : "2" })
    romneyval = romney.findChildren(string=True)
    result = pd.DataFrame({'date':pd.to_datetime(datesval), 'GID1':obamaval, 'GID2':romneyval})
    return result
  

Я использую bs4 и изо всех сил пытаюсь найти правильную терминологию, которая привела бы меня туда. Являются ли эти теги, которые я пытаюсь изолировать, или элементами, или атрибутами?

Это не профессиональная вещь, я просто развлекаюсь ради удовольствия. Так что любая помощь, чтобы немного приблизить меня, была бы отличной. (я использую python 3)

Ответ №1:

Вам просто нужно извлечь атрибуты, как только вы найдете узел графика:

 import requests
from bs4 import BeautifulSoup

soup = BeautifulSoup(requests.get("http://charts.realclearpolitics.com/charts/1044.xml").content,"xml")
g = soup.find("graph", gid="1")
data = {"title":g["title"], "color": g["color"]}
  

Что даст вам:

 {'color': '#000000', 'title': 'Approve'}
  

Комментарии:

1. Черт, я знал, что это что-то простое. Спасибо за помощь @Padraic

2. Не беспокойтесь, очевидно, что для Ромни мы просто стираем и повторяем.