一.开发工具pycharm
自己下载就行了,这里up不多做赘述了,我们中心放在代码阶段
二.首先要准备好几个需要的包在pycharm终端输入
pip install bs4
pip install pandas
一般下载会特别慢或者报错,这里还有另外一种方法就是使用Anaconda3 (64-bit)来进行下载
打开Anaconda3 Navigator 点击Environments在右边搜索栏搜索下载即可 点击apply
三.代码部分
头文件调用的包
import requests
import pymysql
import os
from pyecharts.charts import Line
from pyecharts import options as opts
from pyecharts.charts import Bar, Pie,Line,Map,Gauge #柱状图
from pyecharts import options as opts#导入配置项
from bs4 import BeautifulSoup as bs
import pandas as pd
from pandas import Series,DataFrame
#代码主体部分
headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.102 Safari/537.36 Edg/104.0.1293.63',
'Host':'lishi.tianqi.com',
'Accept-Encoding': "gzip, deflate",
'Connection': "keep-alive",
'cache-control': "no-cache"}
#headers是初级爬虫用来伪装成浏览器访问的手段 我这里模仿是谷歌
url='https://lishi.tianqi.com/wuhan/202405.html'
resp= requests.request("GET", url, headers=headers)
resp.encoding = 'utf-8'
soup = bs(resp.text,'html.parser')
data_all=[]
tian_three=soup.find("div",{"class":"tian_three"})
lishitable_content=tian_three.find_all("li")
for i in lishitable_content:
lishi_div=i.find_all("div")
data=[]
for j in lishi_div:
data.append(j.text)
data_all.append(data)
weather=pd.DataFrame(data_all)
weather.columns=["当日信息","最高气温","最低气温","天气","风向信息"]
weather_shape=weather.shape
weather['当日信息'].apply(str)
result = DataFrame(weather['当日信息'].apply(lambda x:Series(str(x).split(' '))))
result=result.loc[:,0:1]
result.columns=['日期','星期']
weather['风向信息'].apply(str)
result1 = DataFrame(weather['风向信息'].apply(lambda x:Series(str(x).split(' '))))
result1=result1.loc[:,0:1]
result1.columns=['风向','级数']
weather=weather.drop(columns='当日信息')
weather=weather.drop(columns='风向信息')
weather.insert(loc=0,column='日期', value=result['日期'])
weather.insert(loc=1,column='星期', value=result['星期'])
weather.insert(loc=5,column='风向', value=result1['风向'])
weather.insert(loc=6,column='级数', value=result1['级数'])
weather.to_csv("XX的天气.csv",encoding="utf-8")
如果你到这里没有报错,恭喜你已经成功爬取了数据,但是如何获取实时的数据呢?
如何爬取我想要的城市数据呢?
url='https://lishi.tianqi.com/wuhan/202405.html'
你需要修改这一行代码 我这里是武汉市并且爬取的是2024.5月份数据
运行完会在列表中生成一个csv文件
weather.to_csv("XX的天气.csv",encoding="utf-8")我这里命名的是”xx的天气“
四.数据分析以及可视化
这里你可以使用两种方法
我这里使用的是pyecharts的方法,具体的包在最开始我已经引用了
weather_data = pd.read_csv("XX的天气.csv", encoding="utf-8")
list_top = list(weather_data['最高气温'])
list_low = list(weather_data['最低气温'])
for i in range(len(list_top)):
list_top[i] = list_top[i].replace("℃", "")
#因为折线图只能读取int整型而我们爬取数据为xx℃,因此我们需要将其替换,或者将数据强转为整型
#但我已经试过了不行,所以就只能替换了
list_low[i] = list_low[i].replace("℃", "")
print(weather_data)
line = (
Line()
.add_xaxis(list(weather_data['日期']))
.add_yaxis("最高气温", list_top, markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_="max")]))
.add_yaxis("最低气温", list_low, markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_="min")]))
.set_global_opts(title_opts=opts.TitleOpts(title="XX城市近期天气变化"), xaxis_opts=opts.AxisOpts(name="日期"), yaxis_opts=opts.AxisOpts(name="温度(℃)"))
)
# 渲染图表
line.render("weather_line_chart.html")
os.system("weather_line_chart.html")
到此就结束了,会在浏览器自动生成折线图
版权归原作者 单片机初学man 所有, 如有侵权,请联系我们删除。