parsing RSS XML feed for item value


L

Larry Wilson

Wanting to parse out the the temperature value in the "<w:current" element, just after the guid element using ElementTree or xml.sax.

Still learning python and getting to know the XML terminology, so need to ask for help, many thank in advance.


This RSS is from "http://rss.weather.com.au/nsw/newcastle"
===================================================
<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Weather.com.au RSS Feed must be used in accordance with the terms and conditions listed at http://www.weather.com.au/about/rss -->
<rss version="2.0" xmlns:w="http://rss.weather.com.au/w.dtd">
<channel>
<title>Weather.com.au - Newcastle Weather</title>
<link>http://www.weather.com.au/nsw/newcastle</link>
<description>Current conditions and forecast for Newcastle, New South Wales.</description>
<language>en-au</language>
<copyright>Copyright 2013 - Weather.com.au Pty Ltd</copyright>
<pubDate>Tue, 19 Nov 2013 05:00:00 GMT</pubDate>
<lastBuildDate>Tue, 19 Nov 2013 05:00:00 GMT</lastBuildDate>
<ttl>15</ttl>
<item>
<title>Newcastle Current Conditions</title>
<link>http://www.weather.com.au/nsw/newcastle/current</link>
<description>
<![CDATA[
<b>Temperature:</b> 20.3&deg;C<br />
<b>Dew Point:</b> 18.6&deg;C<br />
<b>Relative Humidity:</b> 90%<br />
<b>Wind Speed:</b> 22.2km/h<br />
<b>Wind Gusts:</b> 29.6km/h<br />
<b>Wind Direction:</b> SSW<br />
<b>Pressure:</b> 0.0hPa<br />
<b>Rain Since 9AM:</b> 0.6mm<br />
]]>
</description>
<pubDate>Tue, 19 Nov 2013 05:00:00 GMT</pubDate>
<guid isPermaLink="false">C1384837200</guid>
<w:current temperature="20.3" dewPoint="18.6" humidity="90" windSpeed="22.2" windGusts="29.6" windDirection="SSW" pressure="0.0" rain="0.6" />
</item>
<item>
....etc
===================================================
 
Ad

Advertisements

L

Larry Wilson

feed.entries[0].w_current
{'temperature': u'20.3', 'dewpoint': u'18.6', 'windgusts': u'29.6', 'rain': u'0.6', 'humidity': u'90', 'pressure': u'0.0', 'windspeed': u'22.2', 'winddirection': u'SSW'}
in the above I get the subitem as shown. How do I extract the label, values pairs?
 
N

Neil Cerutti

Larry Wilson (e-mail address removed) via python.org
10:39 PM (10 hours ago) said:
Wanting to parse out the the temperature value in the
"<w:current" element, just after the guid element using
ElementTree or xml.sax.

Since you aren't building up a complex data structure, xml.sax
will be an OK choice.

Here's a quick and dirty job:

import io
import xml.sax as sax

the_xml = io.StringIO("""SNIPPED XML""")

class WeatherHandler(sax.handler.ContentHandler):
def startDocument(self):
self.temperatures = []

def startElement(self, name, attrs):
if name == 'w:current': # Nice namespace handling, eh?
self.temperatures.append(attrs)


handler = WeatherHandler()
sax.parse(the_xml, handler)
for temp in handler.temperatures:
for key, val in temp.items():
print("{}: {}".format(key, val))

Output (from your example):

windGusts: 29.6
dewPoint: 18.6
pressure: 0.0
windDirection: SSW
humidity: 90
rain: 0.6
temperature: 20.3
windSpeed: 22.2

For most jobs you would want to keep track of your nesting level, but
that's left out here. I didn't try to capture location or info you
might want but didn't specify, either; left that as an exercise.
 
X

xDog Walker

feed.entries[0].w_current

{'temperature': u'20.3', 'dewpoint': u'18.6', 'windgusts': u'29.6', 'rain':
u'0.6', 'humidity': u'90', 'pressure': u'0.0', 'windspeed': u'22.2',
'winddirection': u'SSW'}


in the above I get the subitem as shown. How do I extract the label, values
pairs?

Python 3.3.0 (default, Sep 30 2012, 09:02:56)
[GCC 4.1.2 20061115 (prerelease) (SUSE Linux)] on linux
Type "help", "copyright", "credits" or "license" for more information.u'29.6', 'rain': u'0.6', 'humidity': u'90', 'pressure': u'0.0', 'windspeed':
u'22.2', 'winddirection': u'SSW'}.... print (label, value)
....
dewpoint 18.6
temperature 20.3
rain 0.6
pressure 0.0
windspeed 22.2
humidity 90
winddirection SSW
windgusts 29.6
 
Ad

Advertisements

Ad

Advertisements


Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top