小草根的博客... » 日志 » [Python] 从Sina上爬天气..
[Python] 从Sina上爬天气..
NGloom 发表于 2008-07-18 13:03:14
# -*- coding: gb2312 -*- #中文支持
import urllib2
from HTMLParser import HTMLParser
import re
class MyHTMLParser(HTMLParser):
EXTRACT = ["City_Data","Weather_TP","Weather_TP","Weather_SM"]#属于这些内容是进行提取
def __init__(self):
self.message = [] #提取的信息
self.state = 0 #当前tag内的内容是否要提取
self.time = 0 #网页上3个预报中提取第几个
HTMLParser.__init__(self)
#self.
def handle_starttag(self,tag,attrs):#parser处于到一个tag的开始调用这个函数
if attrs:
attr = attrs[0]
if tag == 'div':
if attr[0] == "class" and attr[1] in MyHTMLParser.EXTRACT:
self.state = 1
if attr[1] == "City_Data":
self.time += 1
def handle_endtag(self,tag):#parser处理到一个tag的结束调用这个函数
if tag == "div":
self.state = 0
def handle_data(self,data):#parser处理到一个被tag对包着的数据调用这个函数
if self.state == 1 and self.time == 1:
if data and re.match("^\s\s*\s$",data) == None:# data不为None并且不是全部由空字符串组成
self.message.append(data)
pass
if __name__ == "__main__":
url = urllib2.urlopen("http://php.weather.sina.com.cn/search.php?city=%C9%CF%BA%A3")#上海的天气页面
content = url.read()
content = re.subn("°C","℃",content)[0] #将显示的°C换成℃
#print content
parser = MyHTMLParser()
parser.feed(content)
parser.close()
print "天气预报结果:"
for i in parser.message:
print parser.message.index(i),i
##############################################
#嗯,结果还是满意的,只是还是要根据网页的具体情况来写代码
#有通用点的吗?
import urllib2
from HTMLParser import HTMLParser
import re
class MyHTMLParser(HTMLParser):
EXTRACT = ["City_Data","Weather_TP","Weather_TP","Weather_SM"]#属于这些内容是进行提取
def __init__(self):
self.message = [] #提取的信息
self.state = 0 #当前tag内的内容是否要提取
self.time = 0 #网页上3个预报中提取第几个
HTMLParser.__init__(self)
#self.
def handle_starttag(self,tag,attrs):#parser处于到一个tag的开始调用这个函数
if attrs:
attr = attrs[0]
if tag == 'div':
if attr[0] == "class" and attr[1] in MyHTMLParser.EXTRACT:
self.state = 1
if attr[1] == "City_Data":
self.time += 1
def handle_endtag(self,tag):#parser处理到一个tag的结束调用这个函数
if tag == "div":
self.state = 0
def handle_data(self,data):#parser处理到一个被tag对包着的数据调用这个函数
if self.state == 1 and self.time == 1:
if data and re.match("^\s\s*\s$",data) == None:# data不为None并且不是全部由空字符串组成
self.message.append(data)
pass
if __name__ == "__main__":
url = urllib2.urlopen("http://php.weather.sina.com.cn/search.php?city=%C9%CF%BA%A3")#上海的天气页面
content = url.read()
content = re.subn("°C","℃",content)[0] #将显示的°C换成℃
#print content
parser = MyHTMLParser()
parser.feed(content)
parser.close()
print "天气预报结果:"
for i in parser.message:
print parser.message.index(i),i
##############################################
#嗯,结果还是满意的,只是还是要根据网页的具体情况来写代码
#有通用点的吗?
相关日志:
收藏:
QQ书签
del.icio.us
订阅:
Google
抓虾

