利用requests库、beautifulsoup、pyecharts爬取中国天气网并且进行可视化

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()

 

 

 

 

你可能感兴趣的:(beautifulsoup,pyecharts)