2013-11-01 75 views
-1

我期待從每個天氣預報辦公室捕捉每天最高的陣風值。我沒有找到任何表格數據,所以我想我只需要創建一個腳本,可以從網頁中提取。創建一個腳本,將從網頁上的文本中下載一個值

E.g.網頁:http://forecast.weather.gov/product.php?site=JAN&issuedby=ORD&product=CLI&format=CI&version=5&glossary=0

大約一半的時候,我只想捕捉到10月30日在這個車站的最高陣風速度爲23英里/小時。

有可能用Python這樣做嗎?我需要每天運行劇本來捕捉前一天所有氣象站的最大陣風。

我想知道如果我可以只填寫一個表,並鏈接到每個站,並從那裏去。謝謝。


編輯

我拼湊出這個代碼,似乎工作。然而,我發現這些數據在txt文件中會更容易處理。謝謝。

import urllib2, csv 

url="http://forecast.weather.gov/product.php? 
site=JAN&issuedby=ORD&product=CLI&format=CI&version=5&glossary=0" 

downloaded_data = urllib2.urlopen(url) 

#csv_data = csv.reader(downloaded_data) 

row2 = '' 
for row in downloaded_data: 
    row2 = row2 + row 

start = row2.find('HIGHEST GUST SPEED ') + 21 
end = row2.find('HIGHEST GUST DIRECTION', start) 

print int(row2[start:end]) 
+3

這是軟件,所以答案几乎總是「是的,這是可能的。」 –

回答

2

這聽起來像是你想刮一個網站。在這種情況下,我會使用Python的urllib和美麗的湯lib。

編輯:

我只是看看你的鏈接,我不認爲美麗的湯真的會在這種情況下無關緊要。我仍然會使用urllib,但是一旦你獲得了這個對象,你就必須解析這些數據來尋找你需要的東西。這有點哈克,但應該工作。我必須回頭看看事情是如何發生的。

但是,您可以使用美麗的湯提取只是純文本,使您的純文本解析更容易一點?無論如何,只是一個想法!

一旦你得到這些數據,你可以創建任何你想要檢查的邏輯,如果前一個值大於你的最後一遍。一旦你找出那部分,出去並獲取數據。只需創建一個init.d腳本並忘記它。

# example urllib 
def requesturl(self, url): 
    f = urllib.urlopen(url) 
    html = f.read() 
    return html 

# beautiful soup 
def beautifyhtml(self, html): 
    currentprice_id = 'yfs_l84_' + self.s.lower() 
    current_change_id = 'yfs_c63_' + self.s.lower() 
    current_percent_change_id = 'yfs_p43_' + self.s.lower() 
    find = [] 
    find.append(currentprice_id) 
    find.append(current_change_id) 
    find.append(current_percent_change_id) 
    soup = BeautifulSoup(html) 
    # title of the sites - has stock quote 
    #title = soup.title.string 
    #print(title) 
    # p is where the guts of the information I would want to get 
    #soup.find_all('p') 
    color = soup.find_all('span', id=current_change_id)[0].img['alt']  
    # drilled down version to get current price: 
    found = [] 
    for item in find: 
     found.append(soup.find_all('span', id=item)[0].string) 
    found.insert(0, self.s.upper()) 
    found.append(color) 
    return found 
+0

酷感謝我會試試! – Andrew

相關問題