2013-07-16 3 views
2

Я хотел бы ваши советы/помощь по этому вопросу:Использование Python для сбора данных о погоде и записать в файл

Создать питон скрипт, который:

  • Каждый час собирать температура (например, 29 о C) и текущее состояние (например Clear) с этого сайта: http://www.wunderground.com/global/stations/54511.html
  • Создать CSV-файл с тремя заголовками:
    • Datetime (временная метка данных захвачена)
    • Современное состояние
    • Температура

Добавить данные, собранные с веб-сайта в новую строку файла CSV.

Правила:

  • Скрипт должен быть запущен на компьютере автоматически в течение 5 дней.

У вас есть совет? :(

Я ценю вашу помощь на этом

Я попытался это:.

import urllib2 
import cookielib 

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

setURL = 'http://www.wunderground.com/global/stations/54511.html?MR=1' 
request = urllib2.Request(setURL) 
response = opener.open(request) 

url = "http://www.wunderground.com/global/stations/54511.html?MR=1" 
request = urllib2.Request(url) 
page = opener.open(request) 

WeatherData = page.read()        
print WeatherData 

Так напечатать все данные, но я хочу, чтобы напечатать только:

Datetime (метки времени полученных данных) - текущее состояние - температура

  • как я сказал, нужно advice.like:

    • , что я должен использовать для выполнения этой задачи.

    • Как установить данные собирают в течение (дней), я не знаю ..

мне не нужен полный ответ и скопировать пасту, я не дурак ...

Я хочу ПОНИМАТЬ.

ответ

2

Подземная погода опубликовала сообщение Python sample для доступа к их API. Я думаю, вам лучше всего использовать их код. Если вы играете с переменной parsed_json в примере, вы сможете получить то, что хотите.

Что касается запуска программы через определенные промежутки времени, ознакомьтесь с this thread.

+1

Вам не нужно «изучать» JSON как таковой, потому что это всего лишь способ представления типов Python. parsed_json - фактически словарь Python, поэтому вы можете просто распечатать его как есть и проверить его содержимое без «знания» любого JSON. –

+0

Это здорово! Спасибо! У меня возникли проблемы с location = parsed_json ['China'] ['Beijing'] он говорит в подсказке, ключевая ошибка. Подумайте об этом. Благодарю. – Nardrek

+0

Вам нужно будет изменить URL-адрес '/q/IA/Cedar_Rapids.json' на что-то вроде '/q/CN/Beijing.json'. (Попробуйте, но не может быть фактической ссылкой). –

2

Эта задача называется Screen scraping. Код, показанный ниже, просто добавляет несколько процедур манипуляции строкой для очень простой очистки, но вы можете сделать гораздо лучшую работу с инструментом, созданным для скрипирования экрана, например, Beautiful Soup.

import urllib2 
import cookielib 

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

url = "http://www.wunderground.com/global/stations/54511.html?MR=1" 
request = urllib2.Request(url) 
page = opener.open(request) 

# This is one big string 
rawdata = page.read() 

# This breaks it up into lines 
lines_of_data = rawdata.split('\n') 

# This is one line in the raw data that looks interesing. I'm going to 
# filter the raw data based on the "og:title" text. 
# 
#'<meta name="og:title" content="Beijing, Beijing | 31&deg; | Clear" /> 

# The "if line.find(" bit is the filter. 
special_lines = [line for line in lines_of_data if line.find('og:title')>-1] 
print special_lines 

# Now we clean up - this is very crude, but you can improve it with 
# exactly what you want to do. 
info = special_lines[0].replace('"','').split('content=')[1] 
sections = info.split('|') 
print sections 

Выход:

['\t\t<meta name="og:title" content="Beijing, Beijing | 32&deg; | Clear" />'] 
['Beijing, Beijing ', ' 32&deg; ', ' Clear />'] 

Edit: Всеми средствами, если определенный веб-сайт предлагает веб-сервисы, такие как JSON, как в ответ по Xaranke, используйте это! Однако не все веб-сайты, так что Beautiful Soup все еще может быть очень полезен.