1

我想从以下文件中获取温度和时间:

<rss xmlns:georss="http://www.georss.org/georss" version="2.0">
<channel>
<title>Observations from Tunkhannock, PA - USA</title>
<link>
http://weather.weatherbug.com/PA/Tunkhannock-weather.html?ZCode=Z5546&Units=0&stat=TNKCN
</link>
<description>
Weatherbug, the owner of the world's largest weather network is now providing an API to it's weather data in the form of RSS. This will enable it's enthusiastic users to build their own applications.
</description>
<language>en-us</language>
<lastBuildDate>Sat, 05 Jan 2013 01:00:00 GMT</lastBuildDate>
<ttl>60</ttl>
<aws:weather xmlns:aws="http://www.aws.com/aws">
<aws:api version="2.0"/>
<aws:WebURL>
http://weather.weatherbug.com/PA/Tunkhannock-weather.html?ZCode=Z5546&Units=0&stat=TNKCN
</aws:WebURL>
<aws:InputLocationURL>
http://weather.weatherbug.com/PA/Tunkhannock-weather.html?ZCode=Z5546&Units=0
</aws:InputLocationURL>
<aws:station requestedID="" id="TNKCN" name="Tunkhannock HS" city="Tunkhannock" state=" PA" zipcode="18657" country="USA" latitude="41.5663871765137" longitude="-75.9794464111328"/>
<aws:current-condition icon="http://deskwx.weatherbug.com/images/Forecast/icons/cond002.gif">Partly Cloudy</aws:current-condition>
<aws:temp units="&deg;F">30.3</aws:temp>
<aws:rain-today units=""">0</aws:rain-today>
<aws:wind-speed units="mph">1</aws:wind-speed>
<aws:wind-direction>WNW</aws:wind-direction>
<aws:gust-speed units="mph">20</aws:gust-speed>
<aws:gust-direction>WNW</aws:gust-direction>
</aws:weather>
<image>
<title>Local Weather from WeatherBug</title>
<width>142</width>
<height>18</height>
<link>
http://weather.weatherbug.com/PA/Tunkhannock-weather.html?ZCode=Z5546&Units=0&stat=TNKCN
</link>
<url>
http://www.weatherbug.com/aws/imagesHmPg0604/img_wxbug_logo_whiteBG.gif
</url>
</image>
<item>
<title>Live Conditions from Tunkhannock, PA - USA</title>
<link>
http://weather.weatherbug.com/PA/Tunkhannock-weather.html?ZCode=Z5546&Units=0&stat=TNKCN
</link>
<pubDate>Sat, 05 Jan 2013 01:54:00 GMT</pubDate>
<description>
<![CDATA[
<img src="http://deskwx.weatherbug.com/images/Forecast/icons/cond002.gif" border="0" alt="Current Conditions"/>&nbsp;&nbsp;&nbsp;
 <b>Partly Cloudy</b> <br />

 <b>Temperature:</b> 30.3 &deg;F&nbsp;&nbsp;    
 <br />
 <b>Wind Speed:</b> 1 mph WNW&nbsp;&nbsp;
 <br /> 
 <b>Gusts:</b> 20 mph WNW &nbsp;&nbsp;
 <b>Rain Today:</b> 0 &quot; &nbsp;&nbsp;
 <br />
]]>
</description>
<georss:point>41.5663871765137 -75.9794464111328</georss:point>
<guid isPermaLink="false">Sat, 05 Jan 2013 01:54:21 GMT-Station1</guid>
</item>
</channel>
</rss

因此,相关数据将是以下行:

<aws:temp units="&deg;F">30.3</aws:temp>

<pubDate>Sat, 05 Jan 2013 01:54:00 GMT</pubDate>

我已经用谷歌搜索和摆弄了几个小时。我已经尝试过 feedparser :

import feedparser
d = feedparser.parse('http://api.wxbug.net/getLiveCompactWeatherRSS.aspx?ACode=A6787859817&zipcode=18657&unittype=0')

但是做

d.feed.temperature 

不起作用(当然)。和

d.feed.aws_temp

简单地返回

{'units': u'&deg;F'}

事实上,当我做 d.feed 时,里面并没有提到温度。有人可以指出我正确的方向吗?我不熟悉 python 或 feedparser,所以我很困惑为什么 d.feed 中没有提到实际温度数据(30.3 度)。

任何建议都非常感谢!

编辑:BeautifulSoup 似乎是要走的路;我在搜索时从未遇到过这种情况。再次感谢!

我的问题是:这是解决这个问题的首选方式吗?我想做的就是使用 RRDTool 绘制天气数据。我使用 Wea​​therBug 的温度,因为它离我家最近。这是这样做的首选方式吗?目前我有一个非常低效的 bash 脚本,它可以下载 weatherbug 网页、greps 正确的行并剪切数据。由于有时数据超过 4 个字符,因此暂时无法正常工作!

#/bin/bash
wget -q -O /home/colby/Scripts/conkyscripts/weather/fullPage "http://weather.weatherbug.com/PA/Tunkhannock-weather.html?zcode=z6286"

Time=`grep 'divObsTime' /home/colby/Scripts/conkyscripts/weather/fullPage | cut -c 41-49`

Temp=`grep -i 'divtemp' /home/colby/Scripts/conkyscripts/weather/fullPage | cut -c 59-62`

echo "As of $Time, it is $Temp"
4

2 回答 2

0
from BeautifulSoup import BeautifulSoup as Soup

file = 'data.xml'
handler = open(file).read()

soup = Soup(handler)

data = soup.find('aws:temp')
print data.text

FeedParser 似乎不能很好地处理解析,但这有效:

import feedparser
import string

d = feedparser.parse(
    'http://api.wxbug.net/getLiveCompactWeatherRSS.aspx?ACode=A6787859817&zipcode=18657&unittype=0')

print str(d.feed['aws_weather']).translate(None, string.ascii_letters)
于 2013-01-05T04:03:14.173 回答
0

我得到了它:

import urllib
from BeautifulSoup import BeautifulSoup as Soup
>>> url='http://api.wxbug.net/getLiveCompactWeatherRSS.aspx?ACode=A6787859817&zipcode=18657&unittype=0'
>>> handler=urllib.urlopen(url).read()
>>> soup=Soup(handler)
>>> data=soup.find('aws:temp')
>>> print data
<aws:temp units="&deg;F">35.8</aws:temp>
>>> print data.text
35.8

现在我的脚本是这样的:

import urllib
import sys
arg = sys.argv
from BeautifulSoup import BeautifulSoup as Soup
url='http://a6787859817.api.wxbug.net/getLiveWeatherRSS.aspx?ACode=A6787859817&zipCode=18657&OutputType=1'
handler=urllib.urlopen(url).read()
soup=Soup(handler)
temp=soup.find('aws:temp')
if "temp" in arg:
    print temp.text
d1=soup.find('aws:month')['number']
d2=soup.find('aws:day')['number']
d3=soup.find('aws:year')['number']
d4=soup.find('aws:hour')['number']
d5=soup.find('aws:minute')['number']
d6=soup.find('aws:am-pm')['abbrv']
mdy=d1+"/"+d2+"/"+d3
if "date" in arg:
    print mdy
hm=d4+":"+d5+" "+d6
if "hour" in arg:
    print hm

对 Conky 非常非常有效,很快我将尝试使用 RRDTOOL

于 2013-01-05T18:51:15.483 回答