BS4获取XML标记变量

时间:2016-10-17 23:13:40

标签: python xml python-3.x beautifulsoup

我正在使用bs4进行网页抓取并尝试从xml <graph gid="1" color="#000000" balloon_color="#000000" title="Approve">

这一行获取标题和颜色标记

输出结果将是{'title':'approve', 'color':'#000000'}

行的词典

xml为here

的页面

我已经编写了这个函数,但这并不是有效的,但我希望我的数据帧的标题是title的结果,而不是手动输入的值。因此,而不是GID1它会读取ApproveObama或者标题的结果。

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 个答案:

答案 0 :(得分: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'}