`
ahuaxuan
  • 浏览: 640654 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

闲来无聊,用python抓取天气信息,简单就是美啊

阅读更多
/**
* 作者:张荣华
* 日期:2009-02-26
**/

晚上闲来无聊,于是用python写了一个抓取天气信息的脚本,您要是不想去网站上看天气,每天开机的时候运行一下脚本就完事了

同学们请看

#encoding:UTF-8
'''
@author: ahuaxuan (张荣华)
@date: 2009-02-06
'''
import re
from httplib import HTTPConnection
from datetime import datetime
import urllib
import urllib2
import sys

header = {}
header['User-Agent'] = 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.3) Gecko/2008092510 Ubuntu/8.04 (hardy) Firefox/3.0.3'
header['Accept-Language'] = 'en-us,en;q=0.7,zh-cn;q=0.3'
header['Accept-Encoding'] = 'UTF-8'
header['Accept-Charset'] = 'ISO-8859-1,utf-8;q=0.7,*;q=0.7'
header['Keep-Alive'] = '300'
header['Connection'] = 'keep-alive'
header['Referer'] = 'http://www.weather.com.cn/'

def postData(url, body):  
    
    opener = urllib2.build_opener()
    urllib2.install_opener(opener)
    req = urllib2.Request(url = url, data = urllib.urlencode(body), headers=header)
    u = urllib2.urlopen(req)
    
    htmlSource = u.read()
   
    return htmlSource

def getData(url):
    
    req = urllib2.Request(url,headers = header)
    res = urllib2.urlopen(req)
    html = res.read()
    
    res.close()
    
    return html

todayPattern = '<div class="box_contenttodayinwea" id="c_1_1">[\s]*?'+\
                '<p>[\s]*?<span>[\s\S]*?</span>[\s]*?' + \
                '<em><strong>(?P<wea>[\s\S]*?)</strong></em>[\s]*?' + \
                '<em class="no_today">(?P<temp>[\s\S]*?)</em>[\s]*?' + \
                '<em>(?P<wind>[\s\S]*?)</em><br/>[\s]*?</p>'
                
futurePattern = '<div class="fut_weatherbox7">[\s]*?' + \
                    '<h3>(?P<date>[\s\S]*?)</h3>[\s]*?'+ \
                    '<p>(?P<aa>[\s\S]*?)</p>[\s]*?'+ \
                    '<h4 class="temp00_dn">(?P<wea>[\s\S]*?)</h4>[\s]*?'+ \
                    '<h4 class="temp01_dn">(?P<tempH>[\s\S]*?)</h4>[\s]*?'+ \
                    '<h4 class="temp02_dn">(?P<tempL>[\s\S]*?)</h4>[\s]*?'+ \
                    '<h4 class="temp03_dn"><a name="sk">(?P<wind>[\s\S]*?)</a></h4>[\s]*?'+ \
                '</div>'

'''
return the json format data of weather
http://search.weather.com.cn/static/url.php
'''
def getWeather(cityName, url):
    body = {}
    body['cityinfo'] = cityName
    text = postData(url, body)
    
    pattern = re.compile("<meta http-equiv=\"refresh\" content=\"0;URL=([\\s\\S]*?)\">")
    rlst = pattern.findall(text)
    
    text = getData(rlst[0])
    fieldList = ['wind', 'wea', 'temp']
    lst = parserWeaPattern(fieldList, text, todayPattern)
    
    fieldList2 = ['wind', 'wea', 'date', 'tempH', 'tempL']
    lst2 = parserWeaPattern(fieldList2, text, futurePattern)
    
    print u"--------------今日天气:-------------".encode("GBK")
    for aa in lst:
        for key,value in aa.items():
            print value
        
    print u"\r\n--------------未来几天:--------------".encode("GBK")
    for aa in lst2:
        print '%s,%s,%s,%s,%s'%(aa['date'],aa['wind'],aa['wea'],aa['tempH'],aa['tempL'])
    return lst

def parserWeaPattern(fieldList, text, pattern):  
    
    list = []
    p = re.compile(pattern)
    iterator = p.finditer(text)
    for matcher in iterator:
        data = {}
        for field in fieldList:
            data[field] = matcher.group(field).encode("GBK")
        list.append(data)
    return list
       
if __name__ == '__main__':
    
    #也可以用区号
    city = u'上海'.encode("GBK")
    reload(sys)
    sys.setdefaultencoding('UTF-8')
    
    print city
    getWeather(city, 'http://search.weather.com.cn/static/url.php')
    


运行后的结果为:
上海
--------------今日天气:-------------
多云
14℃/ 6℃
东南风3-4级

--------------未来几天:--------------
7日星期六,东南风3-4级,多云,高温:15℃,低温:7℃
8日星期日,东南风4-5级,多云转阴,高温:14℃,低温:9℃
9日星期一,微风,晴,高温:10℃,低温:4℃
10日星期二,微风,晴,高温:16℃,低温:9℃
11日星期三,微风转北风3-4级,晴,高温:21℃,低温:14℃
12日星期四,北风3-4级转微风,晴转中雨,高温:21℃,低温:16℃
分享到:
评论
5 楼 ^=^ 2012-03-25  
http://search.weather.com.cn/static/url.php
这个URL已经失效了,请问楼主如何找到新的URL?
4 楼 ahuaxuan 2009-04-09  
stylecn 写道

谢谢,不过我运行时出现了错误:
unexpected character after line continuation character



看来它页面的格式变化了,所以只能修改一下正则表达式了,呵呵,这种通过分析页面得到数据的方法最大的问题就是一旦页面的组织方式变化,就无法正常得到页面上的数据了。呵呵,只能根据它的新页面来修改正则表达式了
3 楼 stylecn 2009-04-09  
谢谢,不过我运行时出现了错误:
unexpected character after line continuation character

2 楼 ahuaxuan 2009-02-20  
好的,谢谢,header部分是我随便写的,其实只要一个user-agent和是否gzip的就可以了
1 楼 bit_kevin 2009-02-20  
urllib2的 头部参数keep-alive是不支持的

相关推荐

    python抓取天气并分析 实例源码

    这是一个用Python编写抓取天气预报的代码示例,用python写天气查询软件程序很简单。这段代码可以获取当地的天气和、任意城市的天气预报,原理是根据url找到网站截取相应的数据展现。 python抓取广州天气并分析 实例...

    python抓取天气源码

    参考一篇文章http://www.cnblogs.com/chenkun24/archive/2012/10/06/2713348.html, 由于作者没有给出源码,自己尝试练手小程序,非常之小!

    人工智能_项目实践_数据抓取_使用python抓取上交所上市公司信息和下载深交所上市公司信息

    在本项目实践中,我们主要探讨了如何利用Python进行数据抓取,特别关注了从上海证券交易所(简称上交所)和深圳证券交易所(简称深交所)获取上市公司信息。这些信息对于金融分析、投资决策以及市场研究至关重要。...

    python爬虫抓取北京天气

    python爬虫抓取北京天气的一个超级简单的案例

    Web-Scraping-with-Python_Python网页信息抓取_Python抓取网页_jupyter_Python抓

    **Python网页信息抓取技术详解** 网页信息抓取,也称为网络爬虫或网页抓取,是通过自动化程序从互联网上获取大量数据的过程。在这个领域,Python语言因其强大的库支持和简洁的语法而成为首选工具。本教程将深入探讨...

    Python抓取京东数据

    ### Python抓取京东数据知识点详解 #### 一、项目背景与目标 本项目旨在通过Python爬虫技术抓取京东网站的商品评论数据,并将其存储至MySQL数据库中,方便后续的数据分析和挖掘工作。该项目重点关注京东图书商品的...

    python抓取

    Python抓取,通常指的是使用Python进行网络数据抓取或网络爬虫的过程。Python因其丰富的库支持和简洁的语法,成为了网络爬虫开发的热门选择。本文将深入探讨Python抓取的相关知识点,包括基础概念、常用库、爬虫架构...

    python抓取淘宝天猫网页商品详情Demo

    在这个"python抓取淘宝天猫网页商品详情Demo"中,我们将探讨如何利用Python进行网页抓取,特别是针对淘宝和天猫的商品详情页面。 首先,我们需要理解网页抓取的基本原理。网页抓取,也称为网络爬虫,是通过模拟...

    基于python抓取豆瓣电影TOP250的数据及进行分析.pdf

    本篇文档《基于python抓取豆瓣电影TOP250的数据及进行分析.pdf》首先强调了Python语言在数据分析、数据抓取和数据清洗等领域的应用,指出Python作为一门入门简单、应用广泛的编程语言,它的数据包和框架也越来越成熟...

    python 抓取1688店铺产品详情爬虫

    python 抓取1688店铺产品详情,爬虫

    python3.0爬虫抓取北京天气json

    python3.0爬虫抓取北京天气json

    Python 抓取图片(源码)

    Python 抓取百度贴吧里边的图片内容

    python3.5爬虫抓取北京天气

    python3.5爬虫抓取北京天气

    Python爬虫抓取2017-2019年上海天气数据

    在这个案例中,我们讨论的是如何使用Python来抓取2345天气网站上的上海2017年至2019年的天气历史数据。这样的任务对于数据分析、研究或者监控特定地区的气候模式都非常有用。 首先,我们需要了解Python中的几个关键...

    Python-抓取知乎V2EX等网站热榜信息

    本项目“Python-抓取知乎V2EX等网站热榜信息”旨在利用Python技术,实现对知乎和V2EX这两个热门互联网社区的热榜信息自动抓取,为数据分析和信息监控提供便利。 首先,我们需要了解Web爬虫的基本概念。Web爬虫是一...

    python抓取淘宝天猫网页商品详情Demo.zip

    本项目"python抓取淘宝天猫网页商品详情Demo.zip"是一个利用Python进行网络数据抓取的示例,主要涉及到以下几个核心知识点: 1. **网络请求库**:在Python中,我们通常使用如`requests`库来发送HTTP请求,获取网页...

    python抓取数据包提取五元组

    抓取数据包:使用Python中的网络抓包库(如Scapy、pcapy、dpkt等),可以监听网络接口或读取存储在文件中的网络数据包。这些库提供了函数和方法来捕获和读取数据包。 解析数据包:对于每个捕获到的数据包,需要对其...

    python抓取免费代理IP

    在IT行业中,网络爬虫和自动化任务经常需要借助代理IP来规避访问限制,提高数据...以上就是基于给定文件信息所涉及的Python抓取和管理代理IP的知识点,这个项目对于需要大量网络请求的开发者来说,具有很高的实用价值。

    Python3抓取天气数据并分析天气

    利用国家气象局和百度天气查询API接口来获取当前天气数据,主要包括温度、湿度、气压等。 获取相关数据之后利用pyecharts模块和PIL模块对数据进行可视化分析。 具体实现过程详见源代码。 安装Python并添加到环境...

    Python-使用python抓取微信公众号中的文章

    使用python抓取微信公众号中的文章

Global site tag (gtag.js) - Google Analytics