本文大致思维:首先登录网站,查看网页内容及数据格式(使用代码查看内容),选择两个城市及对应月份,爬取对应天气数据,进行数据预处理(如缺失值处理、数据类型转换、字符串截取等),数据的初步探索性分析(如描述性统计、数据可视化查看数据分布特征等),然后将处理后天气属性数据存储到数据库表和本地文件。存入成功后,使用代码读取数据检验是否正确。
网页分析
第一步:选择适合进行信息爬虫的网页。
(1)由于要获取的是历史天气信息,我们不考虑常见的天气预报网页,最后选择了“天气后报网”作为目标网站。
首先我们登陆天气后报网站http://www.tianqihoubao.com,如下:
然后定位到我们需要爬取的数据所存在的网页:http://www.tianqihoubao.com/lishi/beijing/month/202209.html。如下图,该网站天气信息按条分布,符合我们的爬虫需求。
(2)我们查看了该网站的robots协议,通过输入相关网址,我们没有找到robots.txt的相关文件,说明该网站允许任何形式的网页爬虫。
(3)我们查看了该类网页的源代码,如下图所示,发现其标签较为清晰,不存在信息存储混乱情况,便于爬取。
第二步:对该网页相关信息所在的url进行获取。
(1)对网页的目录要清晰的解析
为了爬取到北京、天津两地各个月份每一天的所有天气信息,我们小组首先先对网页的层次进行解析,发现网站大体可以分为三层。
第一层是地名的链接,通向各个地名的月份链接页面
第二层是月份链接,对应各个网页具体天数
第三个层次则是具体每一天的天气信息
与是我们本着分而治之的原则,对应不同网页的不同层次依次解析对应的网页以获取我们想要的信息。
第三步:通过解析url对应的网页获取信息并存储。
(1)设置请求登录网页功能,根据不同的url按址访问网页,若请求不成功,抛出HTTPError异常。
(2)设置获取数据功能,按照网页源代码中的标签,设置遍历规则,获取每条数据。注意设置encoding=‘gb18030’,改变标准输出的默认编码, 防止控制台打印乱码。
(3)设置文件存储功能,将爬取的数据按年份和月份分类,分别存储在不同的CSV文件中。注意文件名的设置为城市名加日期,方便后期整理。
爬取数据
登录天气后报网站http://www.tianqihoubao.com/,查看网页内容及数据格式(使用代码或开发者模式查看内容)选择两个城市(如北京和天津),分别选取连续6个月的数据(注意观察网址URL的变化规律),爬取网页中的天气数据(包括城市名、日期、天气状况、气温、风力和风向),保存到DataFrame对象中,控制台输出显示上述DataFrame对象的头5行和后5行。
导入相关库
import numpy as np
import pandas as pd
import requests
import seaborn as sns
from bs4 import BeautifulSoup
import matplotlib.pyplot as plt
网页爬取代码
def downloadtq