大一菜鸟入门实操记录,顺便学习一下怎么在csdn上写markdown

目标的选取

因为相关课程的缘故,需要在1个月内速成python,故选取了python最常用的爬虫作为实操训练
同时,还添加了可视化和GUI入门的内容使爬取的内容应用更丰富
在具体数据的选取上,我爬取的是各省份降水量实时数据

话不多说,开始实操

正文

  1. 爬取数据
  • 使用python爬虫,爬取中国天气网各省份24时整点气象数据
  • 由于降水量为动态数据,以js形式进行存储,故采用selenium方法经xpath爬取数据
    ps:在进行数据爬取时,最初使用的方法是漂亮汤法(beautifulsoup)法,但当输出爬取的内容(<class = split>时,却空空如也。在源代码界面Ctrl+Shift+F搜索后也无法找到降水量,后查询得知此为动态数据,无法用该方法进行爬取
  • 使用循环和分类的方式爬取省份不同、网址相似的降水量数据,顺带记录数据对应的城市
  • f—string:
 url_a= f'http://www.weather.com.cn/weather1dn/101{a}0101.shtml'

f-string 用大括号 {} 表示被替换字段,其中直接填入替换内容

  • 将城市和降水量相对应后存入字典再打印
  • 代码:
from lxml import etree
from selenium import webdriver
import recity = [''for n in range(34)]   #存放城市列表
rain = [''for n in range(34)]   #存放有关降雨量信息的数值
rain_item = []driver = webdriver.Chrome(executable_path='chromedriver')   #使用chrome浏览器打开for a in range(1,5):      #直辖市数据url_a= f'http://www.weather.com.cn/weather1dn/1010{a}0100.shtml'  #网址driver.get(url_a)    #打开网址rain_list = []city_list = []resp_text = driver.page_sourcepage_html = etree.HTML(resp_text)city_list = page_html.xpath('/html/body/div[4]/div[2]/a')[0]    #通过xpath爬取城市名称rain_list = page_html.xpath('//*[@id="weatherChart"]/div[2]/p[5]')[0]   #通过xpath爬取降雨量数据city[a-1] = city_list.text  #存入城市列表rain[a-1] = re.findall(r"\d+\.?\d*",rain_list.text)[0] #存入数值for a in range(5,10):      #一位数字网址数据url_a= f'http://www.weather.com.cn/weather1dn/1010{a}0101.shtml'driver.get(url_a)rain_list = []city_list = []resp_text = driver.page_sourcepage_html = etree.HTML(resp_text)city_list = page_html.xpath('/html/body/div[4]/div[2]/a')[0]    #通过xpath爬取城市名称rain_list = page_html.xpath('//*[@id="weatherChart"]/div[2]/p[5]')[0]   #通过xpath爬取降雨量数据city[a-1] = city_list.text     #存入城市列表rain[a-1] = re.findall(r"\d+\.?\d*",rain_list.text)[0] #存入数值for a in range(10,35):      #二位数字网址数据url_a= f'http://www.weather.com.cn/weather1dn/101{a}0101.shtml'driver.get(url_a)rain_list = []city_list = []resp_text = driver.page_sourcepage_html = etree.HTML(resp_text)city_list = page_html.xpath('/html/body/div[4]/div[2]/a')[0]    #通过xpath爬取城市名称rain_list = page_html.xpath('//*[@id="weatherChart"]/div[2]/p[5]')[0]   #通过xpath爬取降雨量数据city[a-1] = city_list.text  #存入城市列表rain[a-1] = re.findall(r"\d+\.?\d*",rain_list.text)[0] #存入数值d = dict(zip(city,rain))  #将城市和降水量的列表合成为字典for k,v in d.items():  #str转float类型rain_item.append(float(v))print(d)
  • 在对爬取的内容进行处理时,可能会因为数据的类型而报错,如爬下来的数据为str类型,而排序需要数字类型,故需要进行float类型转化
  • 使用该爬取方法,是模拟用户打开网页,并且会在电脑上进行显示。在爬取实验进行中途,中国天气网进行了网址更新,原网址出现了部分城市数据无法显示的问题,但当刷新界面后,数据可正常显示,此时可采用模拟鼠标点击刷新的方法避免错误。由于后续找到了新网址,故将这一方法省去。
  1. 数据可视化
  • 用Matplotlib库函数绘制曲线,并输出最大值及相应城市、最小值及相应城市、平均值和中位值

  • 数据的确定:medium分奇偶计算中位值所处排序后数据的位置(中位值);用sum求和后除于数据个数(平均值);max和min函数找到最值再由数值经循环找到对应的城市列表

  • 绘图:使用plt函数绘制图像,并注明横纵坐标、所需注释

  • 文本处理:在进行注释时,plt函数所要求的格式为str类型,故需要进行类型转换,同时添加适当文字说明

  • 代码:

#-*- codeing = utf-8 -*-
import matplotlib.pyplot as plt
from lxml import etree
from selenium import webdriver
import re
import matplotlib
matplotlib.rc("font",family='YouYuan')city = [''for n in range(34)]   #存放城市列表
rain = [''for n in range(34)]   #存放有关降雨量信息的数值driver = webdriver.Chrome(executable_path='chromedriver')   #使用chrome浏览器打开for a in range(1,5):      #直辖市数据url_a= f'http://www.weather.com.cn/weather1dn/1010{a}0100.shtml'  #网址driver.get(url_a)    #打开网址rain_list = []city_list = []resp_text = driver.page_sourcepage_html = etree.HTML(resp_text)city_list = page_html.xpath('/html/body/div[4]/div[2]/a')[0]    #通过xpath爬取城市名称rain_list = page_html.xpath('//*[@id="weatherChart"]/div[2]/p[5]')[0]   #通过xpath爬取降雨量数据city[a-1] = city_list.text  #存入城市列表rain[a-1] = re.findall(r"\d+\.?\d*",rain_list.text)[0] #存入数值for a in range(5,10):      #非直辖一位数字网址数据url_a= f'http://www.weather.com.cn/weather1dn/1010{a}0101.shtml'driver.get(url_a)rain_list = []city_list = []resp_text = driver.page_sourcepage_html = etree.HTML(resp_text)city_list = page_html.xpath('/html/body/div[4]/div[2]/a')[0]    #通过xpath爬取城市名称rain_list = page_html.xpath('//*[@id="weatherChart"]/div[2]/p[5]')[0]   #通过xpath爬取降雨量数据city[a-1] = city_list.text  #存入城市列表rain[a-1] = re.findall(r"\d+\.?\d*",rain_list.text)[0] #存入数值for a in range(10,35):      #非直辖二位数字网址数据url_a= f'http://www.weather.com.cn/weather1dn/101{a}0101.shtml'driver.get(url_a)rain_list = []city_list = []resp_text = driver.page_sourcepage_html = etree.HTML(resp_text)city_list = page_html.xpath('/html/body/div[4]/div[2]/a')[0]    #通过xpath爬取城市名称rain_list = page_html.xpath('//*[@id="weatherChart"]/div[2]/p[5]')[0]   #通过xpath爬取降雨量数据city[a-1] = city_list.text  #存入城市列表rain[a-1] = re.findall(r"\d+\.?\d*",rain_list.text)[0] #存入数值if len(rain)%2 == 0:        #寻找中值medium = int(len(rain)/2)
else:medium = int(len(rain)/2)+1
medium_text = "中位值:" + rain[medium]d = dict(zip(city,rain))  #将城市和降水量的列表合成为字典rain_item = []
city_min = []
city_max = []for k,v in d.items():rain_item.append(float(v))average_rain = sum(rain_item)/len(rain_item)
average_text = "平均值:"+ str(average_rain)max_rain = max(rain_item)  #最大值
min_rain = min(rain_item)  #最小值for k,v in d.items():if float(v) == min_rain:city_min.append(k)min_text = "降雨量最小的城市:"+str(city_min)+" 最小值:"+str(min_rain)for k,v in d.items():if float(v) ==max_rain:city_max.append(k)
max_text = "降雨量最大的城市:"+str(city_max)+" 最大值:"+str(max_rain)plt.bar(range(len(d)), rain_item, align='center')
plt.xticks(range(len(d)), list(d.keys()))
plt.xlabel('城市',fontsize=20)
plt.ylabel('降水量',fontsize=20)
plt.text(0,12,average_text,fontsize=6)
plt.text(0,13,medium_text,fontsize=6)
plt.text(0,14,max_text,fontsize=6)
plt.text(0,15,min_text,fontsize=6)plt.show()
  • 运行界面:
  1. 互动界面
  • 使用tkinter库进行GUI的构建
  • 使用button函数实现交互,调用编写的get函数获取对用户输入的内容进行获取并使用循环进行遍历处理,若城市输入正确,则在界面上输出当地的降水量
  • 代码:
#-*- codeing = utf-8 -*-
from lxml import etree
from selenium import webdriver
import re
import matplotlib
matplotlib.rc("font",family='YouYuan')
from tkinter import *
import tkinter as tkcity = [''for n in range(34)]   #存放城市列表
rain = [''for n in range(34)]   #存放有关降雨量信息的数值driver = webdriver.Chrome(executable_path='chromedriver')   #使用chrome浏览器打开for a in range(1,5):      #直辖市数据url_a= f'http://www.weather.com.cn/weather1dn/1010{a}0100.shtml'  #网址driver.get(url_a)    #打开网址rain_list = []city_list = []resp_text = driver.page_sourcepage_html = etree.HTML(resp_text)city_list = page_html.xpath('/html/body/div[4]/div[2]/a')[0]    #通过xpath爬取城市名称rain_list = page_html.xpath('//*[@id="weatherChart"]/div[2]/p[5]')[0]   #通过xpath爬取降雨量数据city[a-1] = city_list.text  #存入城市列表rain[a-1] = re.findall(r"\d+\.?\d*",rain_list.text)[0] #存入数值for a in range(5,10):      #非直辖一位数字网址数据url_a= f'http://www.weather.com.cn/weather1dn/1010{a}0101.shtml'driver.get(url_a)rain_list = []city_list = []resp_text = driver.page_sourcepage_html = etree.HTML(resp_text)city_list = page_html.xpath('/html/body/div[4]/div[2]/a')[0]    #通过xpath爬取城市名称rain_list = page_html.xpath('//*[@id="weatherChart"]/div[2]/p[5]')[0]   #通过xpath爬取降雨量数据city[a-1] = city_list.text  #存入城市列表rain[a-1] = re.findall(r"\d+\.?\d*",rain_list.text)[0] #存入数值for a in range(10,35):      #非直辖二位数字网址数据url_a= f'http://www.weather.com.cn/weather1dn/101{a}0101.shtml'driver.get(url_a)rain_list = []city_list = []resp_text = driver.page_sourcepage_html = etree.HTML(resp_text)city_list = page_html.xpath('/html/body/div[4]/div[2]/a')[0]    #通过xpath爬取城市名称rain_list = page_html.xpath('//*[@id="weatherChart"]/div[2]/p[5]')[0]   #通过xpath爬取降雨量数据city[a-1] = city_list.text  #存入城市列表rain[a-1] = re.findall(r"\d+\.?\d*",rain_list.text)[0] #存入数值d = dict(zip(city,rain))  #将城市和降水量的列表合成为字典root=tk.Tk()
root.title('降水量查询')
root.geometry('500x200')def get():values = entry.get()for k,v in d.items():if k == values:label = Label(root, text= v+'mm')label.pack()frame = Frame(root)
frame.pack()
u1 = tk.StringVar()
entry = tk.Entry(frame, width=20, textvariable=u1,  relief="sunken")
entry.pack(side="left")frame1 = Frame(root)
frame1.pack()
btn1=Button(frame1, text="查询", width=20, height=1, relief=GROOVE, command=lambda :get())
btn1.pack(side="left")root.mainloop()
  • 运行界面:

写在最后

在爬取天气的过程中,仅发现中国天气网有各省份降水量的数据,可见我国在数据开源方面还有很长的路要走
完整代码详见:https://github.com/jeekzhang/Crawling-and-Visualization-of-Data_scraping

爬取各省降水量及可视化全过程相关推荐

  1. Python爬取天气数据及可视化分析!

    来源丨Python之王 Python爬取天气数据及可视化分析 说在前面 天气预报我们每天都会关注,我们可以根据未来的天气增减衣物.安排出行,每天的气温.风速风向.相对湿度.空气质量等成为关注的焦点.本 ...

  2. Python爬取天气数据及可视化分析

    Python爬取天气数据及可视化分析 文章目录 Python爬取天气数据及可视化分析 说在前面 1.数据获取 请求网站链接 提取有用信息 保存csv文件 2.可视化分析 当天温度变化曲线图 当天相对湿 ...

  3. 招聘数据爬取、数据处理与可视化(v2--解析JS渲染页面)

    招聘数据爬取.数据处理与可视化(v2--解析JS渲染页面) 更新说明 程序说明 数据爬取 观察网页结构 页面解析 将数据写入csv文件中 通过观察页面链接,爬取所有页面 爬虫程序完整代码 爬取数据结果 ...

  4. python爬取微博热搜显示到折线图_微博热搜榜前20信息数据爬取进行数据分析与可视化...

    一.设计方案 1.主题式网络爬虫名称:微博热搜榜前20信息数据爬取进行数据分析与可视化 2.爬取内容与数据特征分析:爬取微博热搜榜前20热搜事件.排名与热度,数据呈一定规律排序. 3.设计方案概述:思 ...

  5. Python爬虫爬取疫情数据并可视化展示

    这篇文章主要介绍了Python利用爬虫爬取疫情数据并进行可视化的展示,文中的示例代码讲解清晰,对工作或学习有一定的价值,需要的朋友可以参考一下.编程资料点击领取 目录 知识点 开发环境 爬虫完整代码 ...

  6. Python爬取天气数据及可视化分析(附源码)

    大家好,我是辰哥(文末送书) 天气预报我们每天都会关注,我们可以根据未来的天气增减衣物.安排出行,每天的气温.风速风向.相对湿度.空气质量等成为关注的焦点.本次使用python中requests和Be ...

  7. b站《双城之战》主题曲《孤勇者》视频评论爬取+简单数据分析+基本可视化(条形图,饼图,词云图)

    双城之战更新啦!!!!!<孤勇者>也在b站上线了!!!! <孤勇者> 是真的好听!!!!没听的快给我去听:<双城之战>也是真的好看,没看到快给我去看!!!! 今天我 ...

  8. 关于js渲染网页时爬取数据的思路和全过程(附源码)

    于js渲染网页时爬取数据的思路 首先可以先去用requests库访问url来测试一下能不能拿到数据,如果能拿到那么就是一个普通的网页,如果出现403类的错误代码可以在requests.get()方法里 ...

  9. Python (入门)爬取网页制作成可视化图形

    刚开始入门PYtyon,把之前学到的部分东西写了一个简单的爬虫,部分代码如下 爬取上海链家二手房的数据.py 发现有点不好,修改一下 import requests from bs4 import B ...

最新文章

  1. 改进型 clock 页面置换算法实现_ID生成算法雪花算法介绍及实现
  2. 修改JBOSS服务器的端口号
  3. bs架构的系统能连接mysql吗_HTTP、BS架构
  4. 100以内的偶数的个数_10以内数字的奇偶性认识
  5. javaweb实训第三天下午——Web基础-Servlet交互JSP原理及运用
  6. 它决定支付30万美元的勒索金
  7. [Linux笔记]重装windows后重装grub
  8. noip模拟赛 寻宝之后
  9. mysql 行级锁 where_mysql 行级锁的使用以及死锁的预防
  10. 计算机网络(第七版)谢希仁编著 前五章部分课后答案详解
  11. 软件工程期末复习题库
  12. 部署Extmail邮件系统需注意几点
  13. 怎样用photoshop放大图片可以不失真的方法
  14. matlab中逗号分号冒号方括号,matlab中分号、冒号、逗号等常用标点符号的作用,又快又好...
  15. 公众号认证?小程序认证?小程序复用公众号资质进行认证?
  16. 仿抖音效果的数字时钟罗盘
  17. unity 入门二 :射击
  18. android6.0 Bluetooth蓝牙源码流程笔记
  19. 《The One 团队》:第九次团队作业:BETA冲刺与团队项目验收
  20. 安卓开发(2)之安卓操作系统架构

热门文章

  1. Keystone Fernet tokens
  2. QLExpress 系列入门教程-07-QLExpress 相关 API 简介
  3. 科研热点|2022年NSFC优青(海外)项目指南来了~
  4. fseek()函数 和 ftell()函数
  5. java面试官看到这些面试答案只会点头:过了过了,明天直接上班
  6. ensp 以太网基础与vlan配置实验(基于接口划分和MAC地址划分vlan)
  7. 方舟服务器目前维修中,明日方舟:游戏最近隔三差五维护,只能说——发家致富、全靠维护...
  8. 神级程序员都用什么工具?2020 年度开发工具 Top 100
  9. 网络通讯-Socket-TCP-demo(C语言版)
  10. MySQL基础_常见函数