1.安装环境
(1) requests库(负责数据爬取):pip install requests
(2) beautifulsoup(负责数据解析):pip install bs4
(3) pyecharts(负责数据可视化): pip install pyecharts
【补充】pyecharts在github上的仓库地址为:https://github.com/pyecharts/pyecharts ,需要的可以自行去学习,很容易上手。
已经安装以上环境的可忽略
2.爬虫代码
# 爬取中国 天气网 并进行 pyecharts数据可视化 # 爬取中国 天气网 并进行 pyecharts数据可视化 # requests + beautifulsoup + pyecharts # requests + beautifulsoup + pyecharts import requests from bs4 import BeautifulSoup from pyecharts.charts import Bar from pyecharts import options as opts ALL_DATA = [] # 爬取和解析 def parse_page(url): headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) ' 'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36' } response = requests.get(url, headers=headers) # 将爬取下来的bytes类型数据解析成unicode字符串 text = response.content.decode('utf-8') # 这里使用的是html5lib解析器,兼容比较好,推荐使用这个 soup = BeautifulSoup(text, 'html5lib') conMidtab = soup.find('div', class_='conMidtab') tables = conMidtab.find_all('table') for table in tables: trs = table.find_all('tr')[2:] # 不懂enumerate的可以自行去百度一下其用法 for index, tr in enumerate(trs): tds = tr.find_all('td') city_td = tds[0] if index == 0: city_td = tds[1] # 返回的一个生成器,所以要强行转化为一个列表 city = list(city_td.stripped_strings)[0] temp_td = tds[-2] # stripped_strings是beautifulsoup获取文本的一种方式,并且去空格 min_temp = list(temp_td.stripped_strings)[0] # 通过append来向列表中添加元素 ALL_DATA.append({'城市': city, '最低气温': int(min_temp)}) def main(): # 爬取的页面列表 urls = [ 'http://www.weather.com.cn/textFC/hb.shtml', 'http://www.weather.com.cn/textFC/db.shtml', 'http://www.weather.com.cn/textFC/hz.shtml', 'http://www.weather.com.cn/textFC/hn.shtml', 'http://www.weather.com.cn/textFC/hd.shtml', 'http://www.weather.com.cn/textFC/xb.shtml', 'http://www.weather.com.cn/textFC/xn.shtml', 'http://www.weather.com.cn/textFC/gat.shtml' ] # 循环遍历页面列表,进行数据爬取和解析 for url in urls: parse_page(url) # 分析数据,根据最低气温进行排序 ALL_DATA.sort(key=lambda data: data['最低气温']) data = ALL_DATA[0:10] # 取出前10的最低气温及其城市 # pyecharts # 数据可视化 # 数据可视化 cities = list(map(lambda x: x['城市'], data)) temps = list(map(lambda x: x['最低气温'], data)) bar = Bar() # x轴内容 bar.add_xaxis(cities) # 某一对象的标识,以及列表x对应的每一个y列表元素 bar.add_yaxis("气温", temps) # chart名称 bar.set_global_opts(title_opts=opts.TitleOpts(title="中国天气网")) # 在本地生成html页面 bar.render("tianqi.html") # 调用main函数 main()