【发布时间】:2014-07-30 15:41:09
【问题描述】:
stackoverflow 上的第一篇文章,python 的新手。我正在尝试从 wunderground 的某个位置读取天气数据。应该是直截了当的:
import csv
import urllib2
url = 'http://www.wunderground.com/weatherstation/WXDailyHistory.asp?ID=KMDLAURE4&day=9&month=6&year=2013&graphspan=day&format=1'
response = urllib2.urlopen(url)
cr = csv.reader(response)
但是,当我这样做时,我会在所有数据之间添加一条额外的线。因此,如果我检查 .csv 输出的前几行,我会得到以下信息:
cr.next()
Out[210]: []
cr.next()
Out[211]:
['Time',
blah blah blah fields redacted
'DateUTC<br>']
cr.next()
Out[212]:
['2013-06-09 00:07:00',
blah blah blah data redacted
'2013-06-09 04:07:00',
'']
cr.next()
Out[213]: ['<br>']
cr.next()
Out[214]:
['2013-06-09 00:22:00',
blah blah blah data redacted,
'2013-06-09 04:22:00',
'']
我可以循环遍历文件,然后丢弃所有其他行,或者检查该行是否仅包含
并删除它。对我来说,这是一个不雅的解决方案,因为真正的“问题”是由于阅读文本。这似乎是一个“二进制打开”或编解码器问题,但我该如何检查?谢谢!
【问题讨论】:
-
如果结果中出现
<br>,那么它是 HTML 文件而不是(正确的)CSV 文件。 -
这种很烂。我查看了网站。看起来它正在返回 csv 数据,但内容类型错误,这就是您在打开 url 时获得格式 (
) 等的原因。看起来你只需要遍历你的数据并忽略/远程导致问题的标签。 -
这似乎不是一个神奇的 API 调用,在这里讨论:wunderground.com/weather/api。该 API 返回 XML 或 JSON,但不返回 CSV。
-
对。我试图避免使用 API,因为(对我而言)这似乎更适合于获取实时预测数据。