创建一个脚本,从网页上的文本下载值

时间:2013-11-01 18:18:03

标签: python

我希望从每个天气预报办公室获取每天最高的阵风价值。我没有找到任何表格数据,所以我认为我需要创建一个可以从网页中提取的脚本。

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])

1 个答案:

答案 0 :(得分:2)

听起来你想要抓一个网站。在这种情况下,我会使用python的urllib和漂亮的汤lib。

编辑:

我只是查看你的链接,我不认为在这种情况下美丽的汤真的很重要。我仍然会使用urllib,但是一旦你得到那个对象,你就必须解析那些数据,寻找你需要的东西。这有点hacky,但应该工作。我必须回过头来看看情况如何发生。

但是,您可以使用漂亮的汤来提取纯文本,使您的纯文本解析更容易一些吗?无论如何,只是一个想法!

获得该数据后,您可以创建要检查的前一个值是否大于上一次传递的逻辑。一旦你找出那部分,走出去获取数据。只需创建一个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