Разбор HTML-данных из Wunderground - PullRequest
       12

Разбор HTML-данных из Wunderground

2 голосов
/ 09 февраля 2012

All

Я пытаюсь загрузить историю данных о погоде из Wunderground. Проблема в том, что мне нужна полная информация о METAR.

Вот пример, который я хочу скачать: CSV с полным METAR .

Поскольку я хочу загружать почасовые данные за весь год, мне нужно их написать. Но независимо от того, что я пробовал (bash с wget или python), я все равно не могу получить страницу с полным METAR через скрипт.

Вот пример моего скрипта:

import urllib2
from BeautifulSoup import BeautifulSoup
url = "http://www.wunderground.com/history/airport/KBUF/2011/1/1/DailyHistory.html?theprefset=SHOWMETAR&theprefvalue=1&format=1"
page = urllib2.urlopen(url)
dailyData = page.read()                            
print dailyData

Что у меня есть что-то вроде:

12:54 AM,52.0,45.0,77,29.93,10.0,SSW,15.0,-,N/A,,Scattered Clouds,200,2011-01-01 05:54:00<br />
1:54 AM,53.1,45.0,74,29.95,10.0,SSW,12.7,-,N/A,,Mostly Cloudy,200,2011-01-01 06:54:00<br />
2:54 AM,50.0,44.1,80,29.95,10.0,SSW,8.1,-,N/A,,Mostly Cloudy,200,2011-01-01 07:54:00<br />
3:54 AM,51.1,44.1,77,29.93,10.0,SSE,5.8,-,N/A,,Scattered Clouds,150,2011-01-01 08:54:00<br />

Через веб-браузер я получаю следующее: обратите внимание на новый столбец, начинающийся с METAR:

12:54 AM,52.0,45.0,77,29.93,10.0,SSW,15.0,-,N/A,,Scattered Clouds,METAR KBUF 010554Z COR 20013KT 10SM FEW045 SCT140 11/07 A2992 RMK AO2 SLP134 60004 T01110072 10111 20078 58016,200,2011-01-01 05:54:00
1:54 AM,53.1,45.0,74,29.95,10.0,SSW,12.7,-,N/A,,Mostly Cloudy,METAR KBUF 010654Z 20011KT 10SM BKN055 BKN130 12/07 A2994 RMK AO2 SLP141 T01170072,200,2011-01-01 06:54:00
2:54 AM,50.0,44.1,80,29.95,10.0,SSW,8.1,-,N/A,,Mostly Cloudy,METAR KBUF 010754Z 20007KT 10SM BKN050 BKN130 10/07 A2994 RMK AO2 SLP140 T01000067,200,2011-01-01 07:54:00
3:54 AM,51.1,44.1,77,29.93,10.0,SSE,5.8,-,N/A,,Scattered Clouds,METAR KBUF 010854Z 15005KT 10SM SCT050 SCT130 11/07 A2992 RMK AO2 SLP134 T01060067 58000,150,2011-01-01 08:54:00

Любое решение этого вопроса будет оценено. Спасибо!

Ответы [ 2 ]

3 голосов
/ 09 февраля 2012

Просматривая wunderunderground , я нашел ссылку "Показать полные МЕТАРИИ" . После того, как вы щелкнете туда, наведите браузер на ссылку , которую вы разместили , или на ссылку «Файл с разделителями-запятыми» , на которой отображаются данные METAR. Кажется, установить некоторые куки. Например, page.info() показывает, что «Prefs» включает в себя «SHOWMETAR: 1»:

Set-Cookie: Prefs=FAVS:1|WXSN:1|PWSOBS:1|WPHO:1|PHOT:1|RADC:0|RADALL:0|HIST0:NULL|GIFT:1|SHOWMETAR:1|PHOTOTHUMBS:50|HISTICAO:KBUF*NULL|; path=/; expires=Fri, 01-Jan-2020 00:00:00 GMT; domain=.wunderground.com

import urllib2
import cookielib

cookieJar = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookieJar))

setmetar = 'http://www.wunderground.com/cgi-bin/findweather/getForecast?setpref=SHOWMETAR&value=1'
request = urllib2.Request(setmetar)
response = opener.open(request)

url = "http://www.wunderground.com/history/airport/KBUF/2011/1/1/DailyHistory.html?theprefset=SHOWMETAR&theprefvalue=1&format=1"
request = urllib2.Request(url)
page = opener.open(request)
# print(page.info())
dailyData = page.read()                            
print dailyData

выходы

TimeEST,TemperatureF,Dew PointF,Humidity,Sea Level PressureIn,VisibilityMPH,Wind Direction,Wind SpeedMPH,Gust SpeedMPH,PrecipitationIn,Events,Conditions,FullMetar,WindDirDegrees,DateUTC<br />
12:54 AM,52.0,45.0,77,29.93,10.0,SSW,15.0,-,N/A,,Scattered Clouds,METAR KBUF 010554Z COR 20013KT 10SM FEW045 SCT140 11/07 A2992 RMK AO2 SLP134 60004 T01110072 10111 20078 58016,200,2011-01-01 05:54:00<br />
1:54 AM,53.1,45.0,74,29.95,10.0,SSW,12.7,-,N/A,,Mostly Cloudy,METAR KBUF 010654Z 20011KT 10SM BKN055 BKN130 12/07 A2994 RMK AO2 SLP141 T01170072,200,2011-01-01 06:54:00<br />
0 голосов
/ 09 февраля 2012

Когда я нажимаю этот URL через браузер, данные, которые я вижу, совпадают с первым примером, который вы включаете.Обходя сайт Wunderground, похоже, что есть способ зарегистрировать учетную запись разработчика / API - если вы сделали это и вошли в систему при получении данных, то расхождение, вероятно, связано с дополнительной информацией, доступной длязарегистрированных пользователей.

Если вам необходимо пройти аутентификацию для получения полных данных, стоит потратить время на использование mechanize , чтобы помочь вам управлять файлами cookie.

В противном случае, я подозреваю, что есть разница в URL, которые вы используете - расширенные данные, вероятно, указываются с дополнительными аргументами.

...