Python爬虫实战-中国最低气温排行

第一步、分析页面

image.png

F12打开分析页面源码,废话不多说

第二部、写代码

# -*- codeing = utf-8 -*-
# @Time : 2023/5/31 18:39
# @Author : 乙太
# @File : 中国最低气温排行榜.py
# @Software : PyCharm

import requests
from bs4 import BeautifulSoup
from pyecharts.charts import Bar
from pyecharts import options as opts
import os
ALL_DATA = []


class TianQi:
    def __init__(self):
        self.headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 Edg/113.0.1774.57',
            'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
            'Cookie': 'HttpOnly; HttpOnly; userNewsPort0=1; defaultCty=101030100; f_city=%E5%A4%A9%E6%B4%A5%7C101030100%7C; defaultCtyName=%u5929%u6D25; zs=101030100%7C%7C%7Cyd-uv'
        }

    def parse_page(self, url):

        response = requests.get(url, headers=self.headers)
        text = response.content.decode('utf-8')
        soup = BeautifulSoup(text, 'html5lib')
        conMidtab = soup.find('div', class_='conMidtab')
        conMidtab2s = conMidtab.find_all('div', class_='conMidtab2')
        if url == 'http://www.weather.com.cn/textFC/gat.shtml':
            conMidtab2s = soup.find('div', class_='conMidtab2')
            tbodys = conMidtab2s.find_all('tbody')
            conMidtab2s = tbodys
        for conMidtab2 in conMidtab2s:
            trs = conMidtab2.find_all('tr')[2:]
            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]
                min_temp = list(temp_td.stripped_strings)[0]
                ALL_DATA.append({"city": city, "min_temp": int(min_temp)})
                # print({"city": city, "min_temp": int(min_temp)})

    def main(self):
        self.urls = [
            'http://www.weather.com.cn/textFC/hb.shtml',
            'http://www.weather.com.cn/textFC/db.shtml',
            'http://www.weather.com.cn/textFC/hd.shtml',
            'http://www.weather.com.cn/textFC/hz.shtml',
            'http://www.weather.com.cn/textFC/hn.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 self.urls:
            self.parse_page(url)
            print(url, '+' * 40)
        # 分析数据
        # 根据最低气温进行排序
        ALL_DATA.sort(key=lambda data: data['min_temp'])  # lambda匿名函数,非常重要;然后从低到高排序
        data = ALL_DATA[0:10]
        print(data)
        # 数据可视化pyecharts
        bar = Bar()
        bar.set_global_opts(title_opts=opts.TitleOpts(title="中国最低气温排行榜"))
        '''
        for city_temp in data:
            city = city_temp['city']
            cities.append(city)
        '''
        cites = list(map(lambda x: x['city'], data))
        temps = list(map(lambda x: x['min_temp'], data))
        bar.add_xaxis(cites)
        bar.add_yaxis("城市",temps)
        bar.render('temperature.html')
        os.system('temperature.html')

if __name__ == '__main__':
    TQ = TianQi()
    TQ.main()

最后:实现效果

image.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是乙太呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值