2016-10-17 2 views
2

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

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

страница, где XML является here

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

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)

ответ

2

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

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'} 
+0

Черт, Я знал, что это просто. Спасибо за помощь @Padraic – hselbie

+0

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

Смежные вопросы