最近用java写网站有点累了,发发一些写于一年前的python代码,一直没有用在实际系统中。不知道针对现在的天气预报网站是不是有效,不过对各位应该又很大的参考价值.
使用BeautifulSoup做HTML分析。
抓取最近的5天数据,并保存到mysql数据库中。
如果出现处理失败,会向指定的邮件地址,发送报警。这是一个比较完善的天气预报抓取程序
。
import
os,urllib2,re,MySQLdb,datetime,time,smtplib
from
BeautifulSoup
import
BeautifulSoup
from
StringIO
import
StringIO
from
email.mime.text
import
MIMEText
USER_AGENT =
' Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1'
BASE_URL_BEGIN=
'http://www.weather.com.cn/html/weather/'
BASE_URL_END =
'.shtml'
conn = MySQLdb.connect(host=
"localhost"
, user=
"fun"
, passwd=
"fun"
, db=
"fun"
,use_unicode=
1
, charset=
'utf8'
)
mailto_list=[
"ealpha.shi@mobimtech.com"
]
mail_host=
"imichat.com"
mail_user=
"imichat"
mail_pass=
"imichat"
mail_postfix=
"imichat.com"
faultwid = []
dotime =
0
def
send_mail(to_list,sub,content):
''
me=mail_user+
"<"
+mail_user+
"@"
+mail_postfix+
">"
msg = MIMEText(content)
msg[
'Subject'
] = sub
msg[
'From'
] = me
msg[
'To'
] =
";"
.join(to_list)
try
:
s = smtplib.SMTP()
s.connect(mail_host)
s.login(mail_user,mail_pass)
s.sendmail(me, to_list, msg.as_string())
s.close()
return
True
except
Exception, e:
print
str(e)
return
False
def
getFiveDayWeather(wid,pageid,agent=USER_AGENT):
url = BASE_URL_BEGIN + pageid + BASE_URL_END
request = urllib2.Request(url)
request.add_header(
'User-Agent'
, agent)
opener = urllib2.build_opener()
allhtml = StringIO(str((opener.open(request)).read()))
soup = BeautifulSoup(allhtml, fromEncoding=
"utf-8"
)
html = soup.find(
'div'
, id=
'dd_0'
).parent.contents
getWeatherList(wid,html)
return
html
def
getWeatherList(wid,html):
soup1 = BeautifulSoup(str(html))
time = soup1.find(
'h2'
)
update_time =
''
for
t
in
time:
update_time = t
html2 = soup1.findAll(
'div'
, {
"class"
:
"fut_weatherbox"
})
dayid =
0
for
dayweather
in
html2:
dayid +=
1
getOneDayWeather(wid,dayid,update_time,dayweather)
pass
def
getOneDayWeather(wid,dayid,update_time,html):
soup = BeautifulSoup(StringIO(str(html)), fromEncoding=
"UTF-8"
)
day = soup.findAll(
'h3'
)
imgs = soup.findAll(
'img'
)
t00 = soup.findAll(
'h4'
, {
"class"
:
"temp00_dn"
})
t01 = soup.findAll(
'h4'
, {
"class"
:
"temp01_dn"
})
t02 = soup.findAll(
'h4'
, {
"class"
:
"temp02_dn"
})
t03 = soup.findAll(
'h4'
, {
"class"
:
"temp03_dn"
})
soup_h3 = BeautifulSoup(StringIO(str(day)), fromEncoding=
"UTF-8"
)
day_value = soup_h3.h3.renderContents()
soup_img = BeautifulSoup(StringIO(str(imgs[
0
])), fromEncoding=
"UTF-8"
)
imgsrc = soup_img.first(
'img'
)[
'src'
]
d_pic_value = imgsrc.split(
'/'
)[-
1
].split(
'.'
)[-
2
]
soup_img = BeautifulSoup(StringIO(str(imgs[
1
])), fromEncoding=
"UTF-8"
)
imgsrc = soup_img.first(
'img'
)[
'src'
]
n_pic_value = imgsrc.split(
'/'
)[-
1
].split(
'.'
)[-
2
]
soup_t00 = BeautifulSoup(StringIO(str(t00)), fromEncoding=
"UTF-8"
)
weather_value = soup_t00.h4.renderContents()
soup_t01 = BeautifulSoup(StringIO(str(t01)), fromEncoding=
"UTF-8"
)
max_temp = soup_t01.h4.renderContents()
soup_t02 = BeautifulSoup(StringIO(str(t02)), fromEncoding=
"UTF-8"
)
min_temp = soup_t02.h4.renderContents()
soup_t03 = BeautifulSoup(StringIO(str(t03)), fromEncoding=
"UTF-8"
)
wind = soup_t03.h4.renderContents()
insertDB(wid,dayid,update_time,day_value,d_pic_value,n_pic_value,weather_value,max_temp,min_temp,wind )
def
insertDB(wid,dayid,update_time,day_value,d_pic_value,n_pic_value,weather_value,max_temp,min_temp,wind ):
cursor_uodate=conn.cursor()
sql=
"INSERT INTO weatherdetail( wid, dayid, lastupdate, currdate, dpic, npic,weather, maxtemp, mintemp, wind) VALUES( %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)"
param = (wid,dayid,update_time ,day_value,d_pic_value,n_pic_value,weather_value,max_temp,min_temp,wind)
n=cursor_uodate.execute(sql,param)
conn.commit()
def
sendMonitor():
if
len(faultwid) <>
0
:
if
send_mail(mailto_list,
"Error: Get Weather Error "
+str(datetime.datetime.now()),str(faultwid)):
print
"监控邮件发送成功."
else
:
print
"监控邮件发送失败."
pass
def
doworking(dotime,wid,pageid):
try
:
getFiveDayWeather(wid,pageid)
except
(NameError,Exception),e:
print
"has one error on %s %s , then do it again , waiting five secs."
% (wid,pageid)
time.sleep(
5
)
if
dotime <
3
:
doworking(dotime +
1
,wid,pageid)
else
:
faultwid.append(wid)
pass
if
__name__ ==
"__main__"
:
starttime = datetime.datetime.now()
print
"Start."
+str(starttime)
cursor = conn.cursor()
cursor.execute(
"SELECT id,weather_com_cn_pageid FROM weather"
)
result = cursor.fetchall()
for
record
in
result:
doworking(
0
,str(record[
0
]),record[
1
])
print
'\r'
endtime = datetime.datetime.now()
print
"End."
+str(endtime)
print
"-------------------------------------------------"
sendMonitor()
print
(endtime - starttime).seconde
分享到:
相关推荐
这是一个用Python编写抓取天气预报的代码示例,用python写天气查询软件程序很简单。这段代码可以获取当地的天气和、任意城市的天气预报,原理是根据url找到网站截取相应的数据展现。 python抓取广州天气并分析 实例...
在这个主题中,“Python爬取图片 天气预报”涉及到利用Python编写爬虫程序来抓取网络上的天气预报图片。这样的任务通常用于自动收集天气信息,构建个人化的天气预报系统,或者进行数据分析。以下是一些关于这个话题...
标题中的“抓取腾讯首页天气预报.rar”表明这个压缩包包含的是关于如何抓取腾讯网站首页面天气预报信息的相关资源。这通常涉及到网络爬虫技术,网页解析以及可能的JavaScript处理,因为天气预报数据可能在动态加载的...
同时,“我写的一个获取天气的类”说明程序中包含了一个自定义的类,该类负责从网络或者其他数据源抓取天气数据。在编程中,类是一种数据结构,它封装了相关数据和操作这些数据的方法,这里用于获取天气信息,可能是...
具体步骤包括:选择合适的网站作为数据源、编写爬虫程序抓取天气预报数据、配置SMTP服务器以及编写邮件发送脚本。 #### 二、爬虫技术基础 1. **爬虫原理**:爬虫是一种自动抓取网页数据的程序,通常通过HTTP请求与...
通过以上知识点的学习,不仅可以掌握如何使用Python抓取并分析天气数据,还能进一步了解如何进行数据分析与可视化,以及如何将这些技能应用于实际项目中。这不仅有助于提升个人的技术水平,也为日后从事相关领域的...
本项目聚焦于使用Python语言来编写网络爬虫,旨在教会读者如何有效地从网上抓取天气预报数据。在这个过程中,我们将探讨Python的几个核心库,如BeautifulSoup、Requests和Scrapy,它们是构建网络爬虫的基础。 首先...
在中国天气预报网站上抓取天气数据是一项常见的任务,这涉及到网络爬虫技术、数据分析以及可能的API接口利用。以下是一些相关的IT知识点: 1. **网络爬虫**:网络爬虫是自动抓取网页信息的程序,对于天气预报数据的...
内容概要:本篇内容详述了一个简单的Python天气预报应用程序的设计与搭建步骤,它涵盖了通过网络请求获取气象信息以及用Tkinter制作应用程序界面。本文主要介绍了从请求外部API以提取指定城市的实时天气情况到把相关...
全国天气实时获取程序是一款能够帮助用户获取中国各地最新天气信息的应用。这个程序通过与权威气象数据接口对接,实现了对全国范围内的气象数据进行实时更新和展示。用户可以通过它查询到不同城市的气温、湿度、风向...
标签“Python 获取 城市 天气预报”表明这个任务的核心技术是使用Python进行网络数据抓取,特别是针对特定城市(黄石市)的天气预报信息。 以下是这个Python程序的主要步骤和涉及的知识点: 1. **发送HTTP请求**:...
在本文中,我们将深入探讨如何利用Python来抓取并解析天气预报信息,以及实现一个简单的天气查询应用。 首先,我们要了解获取天气预报的基本原理。通常,天气信息由气象部门或专业服务提供商通过API(应用程序接口...
总的来说,这个项目综合了Python GUI编程、网络编程、文件操作、VBA宏编程以及可能的GIS基础知识,提供了一个完整的解决方案来展示和更新四川地区的天气预报。这样的设计既具有实用性,也展示了多种技术的融合应用。
本文将探讨如何使用Python来爬取国外天气预报网站的信息,以获取全球各地的气象数据。 首先,我们需要导入一些必要的Python库,如`httplib`用于HTTP连接,`urllib2`用于打开和读取网页,`time`用于控制程序运行节奏...
结合标签“Python开发-Web爬虫”,我们可以推断这个项目是用Python进行Web开发的一个实例,特别是使用了网络爬虫技术来抓取互联网上的天气数据。Python因其简洁的语法和丰富的库(如requests用于HTTP请求,...
Python爬虫抓取天气信息问题:获取苏州8-15天的天气信息,包含: 日期、天气、温度、风力等信息,然后将数据存入一个文档中,网址为:http://www.weather.com.cn/weather/101190401.shtml。1. 问题分析首先我们进入...
【标题】"默飞天气预报采集程序"是一个用于获取天气预报数据的应用程序,可能是通过编程方式从各种天气预报API或网站抓取数据。这个程序可能适用于个人或企业,帮助他们集成到自己的网页或其他应用程序中,提供实时...
这个应用可能包含了用户界面,允许用户输入城市名或地理位置来获取相关的天气预报。Python是一种广泛使用的高级编程语言,尤其适合进行网络数据抓取和处理,因为它有丰富的库支持,如BeautifulSoup、Requests等。 ...
该项目是一个适合Python初学者的实践教程,主要涵盖了爬虫技术和PyQt5 GUI应用的开发,构建了一个简单的天气预报系统。让我们深入探讨一下其中涉及的知识点。 首先,我们要了解Python爬虫的基本概念。爬虫是一种...