python 实现对天气预报官网未来一周七天的天气情况抓取

通过HTMLPaser和urlib模块对网页进行抓取并分析

实现步骤:

1、自定义MYHTMLParser类

2、实例化类并访问天气预报官网

3、抓取关键数据

4、对数据进行切片处理并输出字典

from html.parser import HTMLPaser   #处理页面模块

from urllib import request  #访问网站模块

L = []  #定义列表接受抓取的信息

class MYHTMLPaser(HTMLParser):  #自定义MYHTMLParser类重写方法

                            #定义三个函数

                           #handle_starttag:处理开始标签  attrs:标签属性 tag:标签

                          a_t = False #定义a_t变量为提出标签内容时的判断做准备

                           def handle_starttag(self,tag,attrs):

                                                           if tag == "h1" and len(attrs) == 0:  #找出不带属性的h1标签

                                                                                               self.a_t = True

                                                           else  tag == "p" and len(attrs) > 1: #找出属性大于1的p标签

                                                                                               self.a_t = True

                            #handle_data:处理标签内容 data:标签内容

                           def handle_data(self,data):

                                                                    if self.a_t ==True:  #取出h1标签p标签的内容并添加到L列表中

                                                                                           L.append(data)

                            #handle_endtag:处理结束标签

                            def handle_endtag(self,tag):

                                                                     self.a_t = False #一个标签读取完成后恢复a_t变量为下一个标签的读取判断做准备

#自定义类实例化

p = MYHTMLParser()

#访问天气预报官网

with request.urlopen("http://www.weather.com.cn/weather/101010100.shtml") as f:

                                                   data  = f.read().decode('utf-8')   #读取网页数据

#解析网页信息查找未来七天的天气情况并输出到列表中

p.feed(str(data))

p.close() #关闭资源

#对列表进行操作输出字典

L1 = list(list(L)[2:-6])[1:][::2]

L2 = list(list(L)[2:-6])[::2]

weather = dict(zip(L2,L1))

#输出天气

print(weather)

输出结果如下图:


python 实现对天气预报官网未来一周七天的天气情况抓取_第1张图片


源码如下:


# 本模块对一周天气情况进行爬虫

fromhtml.parserimportHTMLParser

fromurllibimportrequest

importre

# 自定义MYHTMLParser类

L = []

classMYHTMLParser(HTMLParser):

                          a_t =False

                          def handle_starttag(self,tag,attrs):

                                                    if tag =="h1"andlen(attrs) ==0:

                                                                                 self.a_t =True

                                                    elif tag =="p"andlen(attrs) >1:

                                                                                 self.a_t =True

                           def handle_data(self,data):

                                                    ifself.a_t ==True:

                                                                                   L.append(data)

                           def  handle_endtag(self,tag):

                                                                                   self.a_t =False

# 自自定义类实例化

p = MYHTMLParser()

# 访问天气预报官网

withrequest.urlopen("http://www.weather.com.cn/weather/101010100.shtml")asf:

                                                         data = f.read().decode('utf-8')

# 解析网页输出关键信息

p.feed(str(data))

p.close()

# 转成字典

L1 =list(list(L)[2:-6])[1:][::2]

L2 =list(list(L)[2:-6])[::2]

weather =dict(zip(L2,L1))

print(weather)

你可能感兴趣的:(python 实现对天气预报官网未来一周七天的天气情况抓取)