Explicación: este proyecto reemplaza nuestra visualización diaria de las condiciones de temperatura en todo el país desde la página web u otros canales (¡este proyecto solo rastrea la temperatura más baja en varias regiones del país, y otras funciones extendidas se pueden mejorar de acuerdo con este proyecto! )
Veamos primero los resultados muy humanos:
Módulos utilizados:
- peticiones
- pycharts
- bs4
Aquí se debe explicar un punto (debe hacerse): la versión de python que usemos será básicamente superior a la 3.6, por lo que habrá problemas al usar la barra en pyecharts; para resolver este problema, el autor también tiene pasos específicos para resolver it: actualice la versión: solo es compatible con Python3.6+
Ejecute los siguientes tres elementos bajo el comando cmd:
1. pip install wheel
2. pip install pyecharts==0.1.9.4 或则 pip install pyecharts -U
3. pip install pyecharts-snapshot
Nota: Este problema es causado por la versión y lo encontré después de leer el github oficial.
Vayamos directamente al código completo: (los pasos específicos de la operación se publicarán en artículos posteriores)
import requests
# from pyecharts import Bar
from bs4 import BeautifulSoup
from pyecharts import Bar
# 目标网站:http://www.weather.com.cn/textFC/hb.shtml
All_DATE=[]
def parse_url(url):
headers = {
'User-Agent':'此处需要更改成你本机的User-Agent'}
reponse = requests.get(url,headers= headers)
text = reponse.content.decode('utf-8')
soup = BeautifulSoup(text, 'html5lib')
ConMidtab = soup.find('div',class_='conMidtab')
# print(ConMidtab)
tables = ConMidtab.find_all('table')
for table in tables:
# print(table)
trs = table.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]
tempt_td = tds[-2]
min_tempt = list(tempt_td.stripped_strings)[0]
All_DATE.append({
'city':city ,'min_tempt':int(min_tempt)})
All_DATE.sort(key=lambda x: x['min_tempt'])
data = All_DATE[0:20] # 取出前20个
cities = list(map(lambda x: x['city'],data))
tempts = list(map(lambda x: x['min_tempt'], data))
# plt.bar(cities, tempts,color ='r') # 绘制柱状图
# plt.show('mytempt.html')
# print(cities)
# print(tempts)
chart = Bar("实时动态华北地区的最低气温柱状图")
chart.add("",cities,tempts)
chart.render('实时天气.html')
def get_url():
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 urls:
parse_url(url)
break # 为了节省时间我们只获取了第一个华北地区的最低气温情况
if __name__ == '__main__':
get_url()
¡Los resultados también se mostrarán normalmente!