技术图文:如何爬取一个地区的气象数据(下)?
背景
架空线路常见的故障有:风偏闪络故障、雷击跳闸故障、雷击断股故障、线路覆冰故障、线路污闪故障、线路外力破坏故障、线路鸟害故障等等。从这些故障中,我们可以看出天气对线路的安全运行起到非常重要的作用。
在上一篇图文 如何爬取一个地区的气象数据(上)中我们介绍了构造一个时间区段的方法,今天我们一起来爬取 给定时间区段和地区的 气象数据的方法。
技术分析
首先,我们来观察一下请求数据的url
地址。
本次爬取数据的区域为邯郸、衡水、保定、沧州、石家庄、邢台,也就是河北电力公司所管辖区域的气象数据。
邯郸地区:
2019年08月份~2019年10月份数据的url
地址:
- http://lishi.tianqi.com/handan/201908.html
- http://lishi.tianqi.com/handan/201909.html
- http://lishi.tianqi.com/handan/201910.html
衡水地区:
2019年08月份~2019年10月份数据的url
地址:
- http://lishi.tianqi.com/hengshui/201908.html
- http://lishi.tianqi.com/hengshui/201909.html
- http://lishi.tianqi.com/hengshui/201910.html
保定地区:
2019年08月份~2019年10月份数据的url
地址:
- http://lishi.tianqi.com/baoding/201908.html
- http://lishi.tianqi.com/baoding/201909.html
- http://lishi.tianqi.com/baoding/201910.html
以此类推,我们可以发现url
中有两个参数第一个参数表示城市,另一个表示时间(年月)。
其次,我们用Python来实现这次的数据爬取任务。
lsgodatetime
模块,在上一篇图文中介绍过。requests
模块,用于发送网络请求并接收返回的数据。lxml
模块,用于解析和处理网页数据。
有关requests
模块的使用方法,以及lxml
中关于xpath
和etree
的使用方法,我会另外写一篇图文来详细介绍。这里就不详细介绍了。
代码实现
import requests
from lxml import etree
import lsgodatetimedef getData(city, date):''':param city: 城市:param date: 日期“年月”:return: 该城市在该年月的气象数据列表'''lst = []headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'}url = "http://lishi.tianqi.com/{0}/{1}.html".format(city, date)html = requests.get(url, headers=headers)bs = etree.HTML(html.text)text = bs.xpath('//ul[@class="lishitable_content clearfix"]/li/div/text()')# 201205 之后网页规则发生变化text1 = bs.xpath('//ul[@class="lishitable_content clearfix"]/li/div/a/text()')if text1:i, j = 0, 0while i < len(text1):date = text1[i]high = text[j + 0]low = text[j + 1]weather = text[j + 2]wind = text[j + 3]data = "{0},{1},{2},{3},{4}{5}".format(date, high, low, weather, wind, '\n')i = i + 1j = j + 4lst.append(data)else:i = 0while i < len(text):date = text[i + 0]high = text[i + 1]low = text[i + 2]weather = text[i + 3]wind = text[i + 4]data = "{0},{1},{2},{3},{4}{5}".format(date, high, low, weather, wind, '\n')i = i + 5lst.append(data)return lstif __name__ == '__main__':months = lsgodatetime.getBetweenMonth('20110201', '20191001')lst = []citys = tuple(['handan', 'hengshui', 'baoding', 'cangzhou', 'shijiazhuang', 'xingtai'])for city in citys:for item in months:lst.extend(getData(city, item))f = open('{0}.csv'.format(city), 'w+')f.writelines(lst)f.seek(0, 0)for each in f:print(each)f.close()
总结
本文详细介绍了利用Python爬取气象数据的方法。这个只是做架空线路气象灾害风险分析的开始,后面还有很多的工作要做。今天就到这里吧!See You!
往期活动
LSGO软件技术团队会定期开展提升编程技能的刻意练习活动,希望大家能够参与进来一起刻意练习,一起学习进步!
- Python基础刻意练习活动即将开启,你参加吗?
- Task01:变量、运算符与数据类型
- Task02:条件与循环
- Task03:列表与元组
- Task04:字符串与序列
- Task05:函数与Lambda表达式
- Task06:字典与集合
- Task07:文件与文件系统
- Task08:异常处理
- Task09:else 与 with 语句(1day)
- Task10:类与对象
- Task11:魔法方法
- Task12:模块
相关文章:

Android :landscape||portrait 切换
可在AndroidManifest.xml里面配置屏幕发现。 在<Activity>中加入这一行android:screenOrientation"landscape/portrait " android中每次屏幕的切换动会重启Activity(可以在Activity销毁前保存当前活动的状态,在Activity再次Create的时候…

web前端开发培训完就业前景怎么样
很多人都在学习web前端技术,认为学好这一项编程技术,找工作是非常稳定的,那么到底web前端开发培训完就业前景怎么样呢?来看看下面的详细介绍就知道了。 web前端开发培训完就业前景怎么样? web前端薪资待遇 从图中我们能够看到web前端从业者…

技术图文:如何改进算法的运行效率?
背景 前段时间,一位好友发给我如下的文件: 每个CSV文件中的数据由三个属性组成,第一个属性为ID,第二个属性为X坐标,第三个属性为Y坐标。由于是二维数据,可以绘制出每个文件的散点图,把这些散点…
B树,B+树,B-树和B*树
B树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right); 2.所有结点存储一个关键字; 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树; 如: …

JS对象直接量,数组直接量和函数直接量
对象直接量创建一个对象: var obj {x:[1,2],y:23}; 代码跟下面是一样的。 var objnew Object(); obj.xnew Array(1,2); obj.y23; 测试:for(var i in obj) alert(obj[i]); 函数直接量:它是一个表达式而不是语句。 (function(){})() 如下例&am…

学习Java编程培训的书籍有哪些
学习java技术除了线上线下的培训学习,书籍的知识也是非常重要的,今天小编为大家整理的就是学习Java的一些书籍,Java书籍是程序员学习提升技能的重要学习渠道,通过书籍Java程序员可以学习当前流行、重要的相关技能。下面我们一起来…

Datawhale组队学习:数据结构与算法课程任务
背景 Datawhale 是国内很有名的一个开源学习组织。这个组织将渴望改变的学习者以及一群有能力有想法的青年人集结在一起,营造出一种互促高效的学习环境,一起为开源学习付出努力。 Datawhale 近期将推出三门课程的组队学习。我先将 数据结构与算法&…

live555学习笔记2-基础类
二 基础类 讲几个重要的基础类: BasicUsageEnvironment和UsageEnvironment中的类都是用于整个系统的基础功能类.比如UsageEnvironment代表了整个系统运行的环境,它提供了错误记录和错误报告的功能,无论哪一个类要输出错误&#x…

自己写的小工具集合
2019独角兽企业重金招聘Python工程师标准>>> 文件夹大小查看工具 用于查看文件夹下每个子文件和子文件夹的大小.以前想统计文件夹大小,只能点右键看属性,而且只能看到文总大小。这个小工具可以通过右键启动,而且能查看文件夹下所有文件和文件夹的大小. 以前用过类似…

哪些人适合学软件测试呢
软件测试是现在很多企业的一个刚需岗位,所以软件测试的发展前景是非常好的,想要了解哪些人适合学软件测试呢?来看看下面的详细介绍就知道了。 哪些人适合学软件测试呢? 1.无编程基础 测试的代码量仅为20%左右,无论是文科生还是非计算机专业…

javabean和EJB的区别
Java Bean 是可复用的组件,对Java Bean并没有严格的规范,理论上讲,任何一个Java类都可以是一个Bean。但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构造器,另外&am…

Datawhale组队学习:初级算法梳理课程任务
背景 Datawhale 是国内很有名的一个开源学习组织。这个组织将渴望改变的学习者以及一群有能力有想法的青年人集结在一起,营造出一种互促高效的学习环境,一起为开源学习付出努力。 Datawhale 近期将推出三门课程的组队学习。我先将 初级算法梳理 的任务…

CSS将长文字换行的方法 (转)
大家都知道连续的英文或数字能是容器被撑大,不能根据容器的大小自动换行,下面是 CSS如何将他们换行的方法! 对于div 1.(IE浏览器)white-space:normal; word-break:break-all;这里前者是遵循标准。 #wrap{white-space:n…

学Java的软件哪些比较好用
很多java程序猿在工作的时候都会用一些辅助工具,辅助工具可以很好的帮助程序猿高效率的完成工作,那么具体学Java的软件哪些比较好用呢?来看看下面的详细介绍。 学Java的软件哪些比较好用? 1. Eclipse Eclipse做为一款开发源代码的Java扩展性开发平台&a…

DataTable的Compute功能详解
在为筛选器创建表达式时,用单引号将字符串括起来:"LastName Jones"下面的字符是特殊字符,如下面所解释的,如果它们用于列名称中,就必须进行转义:\n (newline)\t (tab)\r (carriage return)~()#\…

Datawhale第九期组队学习计划
Datawhale 组队学习 第九期Datawhale组队学习计划马上就要开始啦! 这次共组织三个组队学习,涵盖了编程、机器学习理论以及动手实践的内容,大家可以按照需要选择参加。 数据结构与算法(上) 内容设计:光城…
Hibernate获取数据java.lang.StackOverflowError
原因:因为在重写toString()方法时,把关联的属性也放入到toString方法中了,去掉就可以了。 如:重写的toString方法中不能有关联关系IDCard属性idCard public class Person {private Integer id;private String name;private IDCard…

UI设计培训之UI设计系统知识
最近有很多小伙伴都在学习UI设计的相关知识,很多同学都是东边一学习一下,西边学习一下,根本没有明确的学习方法,对于这个问题小编为大家整理了一下学习UI设计的系统知识,一起看看吧! UI设计培训之UI设计系统知识&#…

java 中的 Enumeration 在Vector,Hashtable和web中的应用
public interface Enumeration<E> 实现 Enumeration 接口的对象,它生成一系列元素,一次生成一个。连续调用 nextElement方法将返回一系列的连续元素。 例如,要输出 Vector<E> v的所有元素,可使用以下方法:…

Datawhale组队学习 Task01:数组(1天)
Task01:数组(1天) 1. 数组的定义 数组是具有一定顺序关系的若干对象组成的集合,组成数组的对象称为数组元素。 例如: 向量对应一维数组矩阵对应二维数组 数组名表示群体的共性,即具有同一种数据类型&a…

IOS一些显示效果和动画效果资料
2019独角兽企业重金招聘Python工程师标准>>> 1.基于AutoLayout的UIScrollView悬停Tab 转载于:https://my.oschina.net/zhugenqiang/blog/1551389

零基础小白学Java难度大不大
零基础小白学Java难度大不大?有很多人都是非常关心这个问题的,如今java在IT互联网行业的快速发展,引起了很多人的注意,那么,哪些人适合入行Java?零基础学习Java难度大吗?下面,小编就为大家解答这些问题。 零基础小白…

Datawhale组队学习 Task02:顺序表和链表(2天)
Task02 顺序表和链表(2天) 1. 线性表的定义与操作 1.1 线性表的定义 线性表(Linear List)是由n(n > 0)个相同类型的数据元素a1,a2,...,an 组成的有序序列。即表中除首尾元素外,其它元素有…

腾讯联姻开心网意欲何为
今天杨长升在新浪科技上看到这样一条信息“腾讯日前已收购开心网部分股份,有意成为开心网大股东。”据了解,早在8月就曾有消息称,腾讯已收购开心网部分股份,现有一位投资界人士处证实了最新的消息:“腾讯参股开心网确有…

在Excel单元格中使用下拉框
文章出处: http://www.cnblogs.com/huangcong/archive/2010/05/21/1740539.html 有时候我们只希望在Excel中的某个单元格中只允许输入某几个限定的数据,这时候我们就可能希望把该单元格设置成为下拉框的形式了,如下图所示: 下面就看看是怎么实现的吧. 1.我们选择一个单元格--数…

JavaScript中常见的错误,你犯了几个?
初学者在学JavaScript这门语言的时候,最害怕看到的,应该就是控制台出现的红色错误信息!其实解决这些错误并不难,这是大多数初学者难以跨越的一个心理障碍而已。 你只要认真看一看错误信息,其实解决错误是非常简单的。别说你英语不…

Datawhale组队学习 Task03:栈与递归(2天)
Task03:栈与递归(2天) 栈是我们经常使用的一种数据结构,如下图所示,手枪发射子弹的顺序与子弹压入弹夹的顺序是相反,即后压入弹夹的子弹先发射出来。 比如我们使用的Word、Excel、Photoshop等软件系统中的…

sql_trace的介绍
sql_trace的介绍 --打开trace文件设置,把sql trace设置为true,就会在udump目录中增加一个trc文件。alter session set sql_tracetrue;show parameter sql_trace;(select * from v$parameter where namesql_trace;)修改后不生效呢&…

Console-算法[if,while]-一输入两个正整数m和n,求其最大公约数和最小公倍数
ylbtech-Arithmetic:Console-算法[if,while]-一输入两个正整数m和n,求其最大公约数和最小公倍数1.A,Demo(案例)输入两个正整数m和n,求其最大公约数和最小公倍数。 1.程序分析:利用辗除法。 1.B,Solution(解决方案)usin…

UI设计培训之如何将设计理论与实践相结合
学习UI设计理论知识与实践技术都是要有的,很多人都不爱去听理论知识,这对以后的工作是没有任何帮助的,只有将设计理论与实践相结合才能帮助到自己,那么如何将设计理论与实践相结合?来看看本期下面的详细介绍。 如何将设计理论与实…