Python-爬取历史地震数据并可视化

主要是通过模拟浏览器请求,获取网页源代码。然后利用xpath解析数据,保存到Excel表格中,或者Mysql数据库中。

  • 爬虫地址

http://www.ceic.ac.cn/speedsearch

  • 成果预览
全球历史地震数据
  • 实现代码
# -*- coding: utf-8 -*-"""
@File    : request200606_中国地震台网.py
@Author  : fungis@163.com
@Time    : 2020/05/06 09:28
@notice  : http://www.ceic.ac.cn/speedsearch
"""import datetime
import requests
from lxml import etree
import pymysql
import pandas as pd
from pyecharts import options as opts
from pyecharts.charts import Geo
from pyecharts.globals import ChartType, ThemeType# 定义一组变量
earthquake_n = []
earthquake_t = []
earthquake_location_lat = []
earthquake_location_lon = []
earthquake_location = []
earthquake_url = []
earthquake_deapth = []
earrh_data = []
geo_location = {}
geo_data = []
geo_attrs = []
geo_values = []# 获取网页源代码
def Get_html(url: object, params: object) -> object:header = {'User-Agent': 'Mozilla/5.0'}params = paramsr = requests.get(url, params=params, headers=header)print(r.url)if r.status_code == 200:r.encoding = r.apparent_encoding# print(r.text)html = r.textelse:print("网页爬取异常")html = "网页爬取异常"return (html)# 解析、提取网页源代码
def Get_data(html):html = etree.HTML(html)trs = html.xpath("//div[@class='title-content']/div[@class='speedquery']/div[@id='speed-search']/table[""@class='speed-table1']/tr")for tr in trs:earthquake_m1 = tr.xpath("./td[1]/text()")earthquake_t1 = tr.xpath("./td[2]/text()")earthquake_location_lat1 = tr.xpath("./td[3]/text()")earthquake_location_lon1 = tr.xpath("./td[4]/text()")earthquake_deapth1 = tr.xpath("./td[5]/text()")earthquake_location1 = tr.xpath("./td[6]/a/text()")earthquake_url1 = tr.xpath("./td[6]/a/@href")# print(earthquake_m1, earthquake_t1, earthquake_location_lat1, earthquake_location_lon1, earthquake_deapth1,#       earthquake_location1, earthquake_url1)try:earthquake_n.append(earthquake_m1[0])earthquake_t.append(earthquake_t1[0])earthquake_location_lat.append(earthquake_location_lat1[0])earthquake_location_lon.append(earthquake_location_lon1[0])earthquake_deapth.append(earthquake_deapth1[0])earthquake_location.append(earthquake_location1[0])earthquake_url.append(earthquake_url1[0])except:# print("异常")passfor i in range(0, len(earthquake_n) - 1):earrh_data.append((earthquake_n[i], earthquake_t[i], earthquake_location_lat[i], earthquake_location_lon[i],earthquake_deapth[i], earthquake_location[i], earthquake_url[i]))# 在Mysql数据库中创建表格
def Mysql_create_table(name):client = pymysql.connect(user="root", host="localhost", passwd="an6688", db="pydat")cursor = client.cursor()sql = "create table if not exists table_%s" % name + "(earthquake_n VARCHAR(100),earthquake_t VARCHAR(100),earthquake_location_lat VARCHAR(100)" \", earthquake_location_lon VARCHAR(100),earthquake_deapth VARCHAR(100),earthquake_location VARCHAR(200)," \"earthquake_url VARCHAR(100));"cursor.execute(sql)cursor.close()client.close()# 插入地震数据到Mysql表格中
def Mysql_data(name, earrh_data):client = pymysql.connect(user="root", host="localhost", passwd="an6688", db="pydat")cursor = client.cursor()sql = "insert into table_%s" % name + " values(%s,%s,%s,%s,%s,%s,%s)"cursor.executemany(sql, earrh_data)client.commit()cursor.close()client.close()def Geo_chart(geo_location, geo_attrs, geo_values):attr = geo_attrs  # 名称value = geo_values  # 位置# 利用pyechart进行制图geo = Geo(init_opts=opts.InitOpts(width='1200px', height='700px', theme=ThemeType.DARK, bg_color="#404a59"))geo.set_global_opts(visualmap_opts=opts.VisualMapOpts(is_piecewise=True,# range_size=[0, np.max(value)],max_=10),title_opts=opts.TitleOpts(title='世界近年历史地震分布图', pos_left='500px', ))# 添加主题,中国地图,填充及边界颜色设置geo.add_schema(maptype='world',# 修改地图yanseitemstyle_opts=opts.ItemStyleOpts(border_color='#fff', color='#323C48'),# symbol_size=15,)geo_cities_coords = []for k in geo_location:# 自定义坐标写入dict_value = str(geo_location[k]).replace('[', '').replace(']', '')geo_cities_coords.append(str(k) + ',' + dict_value)for k in geo_cities_coords:geo.add_coordinate(k.split(',')[0], float(k.split(',')[1]), float(k.split(',')[2]))data = list(zip(attr, value))# print(data)geo.add("", data,type_=ChartType.EFFECT_SCATTER,  # 散点图的一种形式label_opts=opts.LabelOpts(is_show=False),  # 不显示数值则设置为False)geo.render('./earthquake.html')if __name__ == "__main__":url = "http://www.ceic.ac.cn/speedsearch"for i in range(1, int(input("请输入大于1的整数:"))):params = {"time": 6, "page": i}html = Get_html(url, params)Get_data(html)df = pd.DataFrame(earrh_data, columns=['震级', '时间', '纬度', '经度', '震源深度', '地址', 'url'])df.drop_duplicates(inplace=True)  # 数据清洗去重df.to_excel('./earthquake' + str(datetime.datetime.now().strftime('%Y%m%d')) + '.xlsx',encoding='gbk')  # 写入excel中for index, row in df.iterrows():geo_location[(row['地址'])] = [float(row['经度']), float(row['纬度'])]geo_attrs.append(row['地址'])geo_values.append(float(row['震级']))Geo_chart(geo_location, geo_attrs, geo_values)print('爬取完成')# 利用Mysql数据库存储地震数据(前提是已经安装mysql,修改上方数据库的密码)# name = input("表名:")# Mysql_create_table(name)# Mysql_data(name, earrh_data)
  • 结尾
    喜欢的朋友们可以点个关注,后续将持续更新,精彩无限^ - ^

Python-爬取历史地震数据并可视化相关推荐

  1. python爬取历史天气数据

    爬取历史天气数据 import requests from requests.exceptions import RequestException from bs4 import BeautifulS ...

  2. python爬取历史天气数据并保存_Python爬取天气网历史天气数据

    我的第一篇博客,哈哈哈,记录一下我的Python进阶之路! 今天写了一个简单的爬虫. 使用python的requests 和BeautifulSoup模块,Python 2.7.12可在命令行中直接使 ...

  3. 用python爬取历史天气数据

    某天气网站(www.数字.com)存有2011年至今的天气数据,有天看到一本爬虫教材提到了爬取这些数据的方法,学习之,并加以改进. 准备爬的历史天气 爬之前先分析url.左上有年份.月份的下拉选择框, ...

  4. python爬取天气数据_用python爬取历史天气数据的方法示例

    某天气网站(www.数字.com)存有2011年至今的天气数据,有天看到一本爬虫教材提到了爬取这些数据的方法,学习之,并加以改进. 准备爬的历史天气 爬之前先分析url.左上有年份.月份的下拉选择框, ...

  5. python爬取天气数据_Python爬取历史天气数据

    Python爬取历史天气数据 作者:梅昊铭 1. 导读 之前Mo给大家分享过杭州历年天气情况的数据集,相信有不少小伙伴好奇这些数据是怎么获取.今天Mo就来教大家如何使用Python来进行历史天气数据的 ...

  6. python爬取历史天气_Python 爬取历史天气数据

    Python 爬取历史天气数据 作者:梅昊铭 1. 导读 之前Mo给大家分享过杭州历年天气情况的数据集,相信有不少小伙伴好奇这些数据是怎么获取.今天Mo就来教大家如何使用Python来进行历史天气数据 ...

  7. python爬取历史天气查询_Python爬取南京历史天气数据(2345天气网)

    最近学习了如何在2345天气网上爬取历史天气数据,并使用pandas库对数据进行清洗和导出.不过,本文方法对其它网站并不一定适用,主要是记录一种思考的方式. 南京的历史天气数据在这个网站上:http: ...

  8. 利用python爬取2019-nCoV确诊数据并制作pyecharts可视化地图

    1.本章利用python爬取2019-nCoV确诊数据并制作pyecharts可视化地图: 2.主要内容为绘制出中国各省疫情数据,疫情数据从四个维度进行可视化展示:累积确诊人数.现存确诊人数.治愈人数 ...

  9. python爬去朋友圈_利用Python爬取朋友圈数据,爬到你开始怀疑人生

    人生最难的事是自我认知,用Python爬取朋友圈数据,让我们重新审视自己,审视我们周围的圈子. 文:朱元禄(@数据分析-jacky) 哲学的两大问题:1.我是谁?2.我们从哪里来? 本文 jacky试 ...

  10. 利用Python爬取朋友圈数据,爬到你开始怀疑人生

    人生最难的事是自我认知,用Python爬取朋友圈数据,让我们重新审视自己,审视我们周围的圈子. 文:朱元禄(@数据分析-jacky) 哲学的两大问题:1.我是谁?2.我们从哪里来? 本文 jacky试 ...

最新文章

  1. boost::callable_traits添加const成员的测试程序
  2. WordPress解析之数据库
  3. HDU4405(概率DP求期望)
  4. javascript是一门多线程的语言_Javascript:10天设计一门语言
  5. 神经网络 卷积神经网络_如何愚弄神经网络?
  6. 360网络修复工具_为什么大家都在骂360,但是360依旧是很强?
  7. SOA架构设计的案例分析
  8. 从根儿上解决Word中标题多级标题编号不联动问题
  9. 为何我的孩子不沉迷网络游戏
  10. 没有NumLock键的小键盘误触变成方向键
  11. NodeJS必知基础知识(非巨详细)
  12. 测试-APP端常见测试功能点
  13. 从键盘输入一个不多于3位的正整数,要求:求出它是几位数;分别打印出每一位数字;按逆序打印出各位数字
  14. 一份风控模型性能提升秘籍奉上|附视频+实操(详版)
  15. iphone原彩显示对眼睛好吗_iPhone x手机原彩显示烧屏怎么办呢
  16. Linux强大监控工具--dstat
  17. LOJ 6436 [PKUSC 2018] 神仙的游戏
  18. 是不是网站服务器限速最高11,限制网速多少合适(100m访客限速多少kb合适)
  19. Linux下杂乱无章的Bash脚本传入参数--如何解析?
  20. Elasticsearch-script 脚本排序

热门文章

  1. ARM-Linux 交叉编译工具链安装
  2. TCP报文( tcp dup ack 、TCP Retransmission)
  3. unins000.exe自动更新vscode出错解决办法
  4. oracle sqlplus命令登录数据库
  5. 【Visio】 windows Visio 画图
  6. 莫斯密码加密与解密--python加密篇
  7. 使用 stress 命令对cpu进行压力测试
  8. 个人免签支付系统源码插件资源汇总
  9. 微信公众号支付失败的各种原因
  10. 一文看懂Web后端开发