最近因为某些需求需要台风数据的数据库,因此想利用python写一个相关的程序~

因为台风的数据77年之前是没有风圈等数据,所以台风在77年前只有一张数据表,在77年之后多了一张关于风圈风力的表。但是我想把两张表整合到一张去。

import re
import requests
import pymysqlurl = "http://agora.ex.nii.ac.jp/cgi-bin/dt/search_name2.pl?lang=en&basin=wnp&smp=1&sdp=1&emp=12&edp=31"
response = requests.get(url)
response.encoding = 'utf8'
html = response.text
d = re.findall(r'<td><a href="/digital-typhoon/summary/wnp/s/(.*?)">',html,re.S) # 搜索所有的台风信息
for p in d: # 遍历所有的台风网页id =p[:6] # 获取台风的IDprint(id)p_url = 'http://agora.ex.nii.ac.jp/digital-typhoon/summary/wnp/l/'+p # 台风轨迹信息response_1 = requests.get(p_url)html_1 = response_1.textname = re.findall(r'<div class="TYNAME">(.*?)</div>', html_1, re.S)[0] #  获取台风名字name = ''.join(re.findall(r'[A-Za-z]',name))[7:] #  从字符串中获取台风名字(过滤数字)info_1 = re.findall(r'<tr class="ROW(.*?)<td><a',html_1, re.S) # 台风第一张表的信息flag = 1;year_list = []month_list = []day_list = []hour_list = []lat_list = []long_list = []pressure_list = []wind_list = []level_class_list = []gust_list=[]direc_major_storm_list=[]rad_major_storm_list=[]rad_minor_storm_list = []direc_major_gale_list = []rad_major_gale_list = []rad_minor_gale_list = []for pp in info_1: # 遍历每一条记录,并提取值year = re.findall(r'<td>(.*?)</td>',pp, re.S)[0]year_list.append(year)month = re.findall(r'<td>(.*?)</td>', pp, re.S)[1]month_list.append(month)day = re.findall(r'<td>(.*?)</td>', pp, re.S)[2]day_list.append(day)hour = re.findall(r'<td>(.*?)</td>', pp, re.S)[3]hour_list.append(hour)lat = re.findall(r'<td>(.*?)</td>', pp, re.S)[4]lat_list.append(lat)long = re.findall(r'<td>(.*?)</td>', pp, re.S)[5]long_list.append(long)pressure = re.findall(r'<td>(.*?)</td>', pp, re.S)[6]pressure_list.append(pressure)wind = re.findall(r'<td>(.*?)</td>', pp, re.S)[7]wind_list.append(wind)level_class = re.findall(r'<td>(.*?)</td>', pp, re.S)[8]level_class_list.append(level_class)l =  'http://agora.ex.nii.ac.jp/digital-typhoon/summary/wnp/k/'+presponse_2 = requests.get(l)html_2 = response_2.textinfo_2 = re.findall(r'<tr class="ROW(.*?)</tr>', html_2, re.S)if info_2: # 第二张表是否为空for pp in info_2:# 遍历每一条记录,并提取值gust = re.findall(r'<td>(.*?)</td>', pp, re.S)[7]gust_list.append(gust)direc_major_storm= re.findall(r'<td>(.*?)</td>', pp, re.S)[8]direc_major_storm_list.append(direc_major_storm)rad_major_storm = re.findall(r'<td>(.*?)</td>', pp, re.S)[9]rad_major_storm_list.append(rad_major_storm)rad_minor_storm = re.findall(r'<td>(.*?)</td>', pp, re.S)[10]rad_minor_storm_list.append(rad_minor_storm)direc_major_gale = re.findall(r'<td>(.*?)</td>', pp, re.S)[11]direc_major_gale_list.append(direc_major_gale)rad_major_gale = re.findall(r'<td>(.*?)</td>', pp, re.S)[12]rad_major_gale_list.append(rad_major_gale)rad_minor_gale = re.findall(r'<td>(.*?)</td>', pp, re.S)[13]rad_minor_gale_list.append(rad_minor_gale)else:flag=0conn = pymysql.connect(host='127.0.0.1', user='root', passwd='', db='typhoon', charset='utf8') # 连接数据库cur = conn.cursor()sql = "create table `" + id + "`(Number VARCHAR(255),Name VARCHAR(255),Year VARCHAR(255),Month VARCHAR(255),Day VARCHAR(255),Hour VARCHAR(255),Lat VARCHAR(255),Lon VARCHAR(255),Pressure VARCHAR(255),wind VARCHAR(255),class VARCHAR(255),"+\"gust VARCHAR(255),Direc_of_Major_Storm_Axis VARCHAR(255),Radius_of_Major_Storm_Axis VARCHAR(255),Radius_of_Minor_Storm_Axis VARCHAR(255)," + \"Direc_of_Major_Gale_Axis VARCHAR(255),Radius_of_Major_Gale_Axis VARCHAR(255),Radius_of_Minor_Gale_Axis VARCHAR(255))"# 注意当table名字用纯数字命名时,用`数字`,这个符号不是单引号,是感叹号左边的符号cur.execute(sql) # 创建新表for i in range(0,len(year_list)): # 遍历数组写入记录query = "insert into `" + id + "`(Number,Name,Year,Month,Day,Hour,Lat,Lon,Pressure,wind,class,Gust,Direc_of_Major_Storm_Axis," + \"Radius_of_Major_Storm_Axis,Radius_of_Minor_Storm_Axis,Direc_of_Major_Gale_Axis," + \"Radius_of_Major_Gale_Axis,Radius_of_Minor_Gale_Axis) values (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)"# 插入记录if flag == 1: #是否存在第二张表newsObjs = [id, name, year_list[i], month_list[i], day_list[i], hour_list[i], lat_list[i], long_list[i],pressure_list[i], wind_list[i], level_class_list[i], gust_list[i], direc_major_storm_list[i],rad_major_storm_list[i], rad_minor_storm_list[i], direc_major_gale_list[i], rad_major_gale_list[i],rad_minor_gale_list[i]]else:newsObjs = [id, name, year_list[i], month_list[i],day_list[i], hour_list[i],lat_list[i], long_list[i],pressure_list[i], wind_list[i], level_class_list[i],'-','-','-','-','-','-','-']cur.execute(query,newsObjs)conn.commit()cur.close()conn.close()
后来还是觉得太麻烦了,调取pandas库搞定
import requests
import re
import pandas
from lxml import etreeurl = "http://agora.ex.nii.ac.jp/cgi-bin/dt/search_name2.pl?lang=en&basin=wnp&smp=1&sdp=1&emp=12&edp=31"
response = requests.get(url)
response.encoding = 'utf8'
html = response.text
d = re.findall(r'<td><a href="/digital-typhoon/summary/wnp/s/(.*?)">',html,re.S) # 搜索所有的台风信息print(d)
for p in d: # 遍历所有的台风网页id = p[:6]  # 获取台风的IDif int(id)>=197701:p_url = 'http://agora.ex.nii.ac.jp/digital-typhoon/summary/wnp/k/' + p  # 台风轨迹信息response_1 = requests.get(p_url)html_1 = etree.HTML(response_1.text)table = html_1 .xpath('//table[@class="TRACKINFO"]')table = etree.tostring(table[0], encoding='utf-8').decode()df = pandas.read_html(table, encoding='utf-8', header=0)[0]df.to_csv("E:\\typhoon\\"+id+".csv", mode='a', encoding='utf_8_sig', header=0, index=0)

爬虫学习——爬取台风数据存入数据库相关推荐

  1. python爬取微博数据存入数据库_Python爬取微博数据并存入mysql,excel中

    寒假期间做微博数据统计,由于是部门要求,也没办法,自己又是一个懒人,直接用python实现吧.写的很粗糙,也很差,请大家别介意. 总的来说分成两个模块:一个爬取微博数据存入数据库,一个从数据库调取数据 ...

  2. python爬取微博数据存入数据库_Python爬取新浪微博评论数据,写入csv文件中

    因为新浪微博网页版爬虫比较困难,故采取用手机网页端爬取的方式 操作步骤如下: 1. 网页版登陆新浪微博 2.打开m.weibo.cn 3.查找自己感兴趣的话题,获取对应的数据接口链接 4.获取cook ...

  3. python抓取数据库_Python-7.爬取大量数据存入数据库

    本章包含内容: 前言 mongodb环境配置 爬取数据的代码分析 一.前言 在更新完上一篇python文章时,就一直想爬取一个10万量级的数据.在解了mongodb的基本用法和环境配置后,第一次测试的 ...

  4. python爬取微博数据存入数据库_python爬取微博并且存入数据库

    由于平时喜欢刷微博,追星,所以写了想要写一个爬取微博的爬虫,在老师的建议下选择从移动端爬取,因为移动端页面元素简洁,易于爬取.在看微博时发现有比移动端更加简单的一个版本....老年机版?就是分页式的. ...

  5. 如何将爬取的数据存入数据库中

    爬取链接:我爱我家 如果需要参考创建步骤,可以参考这篇文章 爬虫文件:loupan.py import scrapy from baiduSpider.items import Baiduspider ...

  6. Python网络爬虫使用BeautifulSoup爬取网页内容并存入数据库案例

    使用BeautifulSoup爬取网页内容并存入数据库案例 学习了Python网络爬虫,完成里一个比较完整的爬虫案例与大家分享 爬取地址:http://www.tipdm.com/cpzx/index ...

  7. 初识Python爬虫----如何爬取网络数据

    一.什么是网络爬虫 即爬取网络数据的虫子,也就是Python程序. 二.爬虫的实质是什么? 模拟浏览器的工作原理,向服务器发送请求数据. 三.浏览器的工作原理是什么? 浏览器还可以起到翻译数据的作用. ...

  8. 【爬虫+数据库操作】用pandas将爬取的股票信息存入数据库!

    以下内容为本人原创,欢迎大家观看学习,禁止用于商业用途谢谢合作! ·作者:@Yhen ·原文网站:CSDN ·原文链接:https://blog.csdn.net/Yhen1/article/deta ...

  9. 爬虫 spider09——爬取指定数据,去重复,并存储到mysql

    爬取指定数据,去重复,并存储到mysql. 技术栈:Springboot+ssm+定时(定时器)爬取+redis去重+mybatis保存 一.创建父项目Spider pom.xml <?xml ...

最新文章

  1. Mozilla宣布年底前放弃支持Persona登录服务
  2. 如何学习linux编程(转载)
  3. 调用AutoCAD的内置对话框
  4. 编玩边学python助手_边玩游戏,边学Python,四大游戏编程网站
  5. Nexys4DDR+OV7670实现sobel算子边缘检测系统
  6. uniapp 获取到js文件var一个变量怎么获取到这个变量值_浅析Js中const,let,var的区别及作用域...
  7. 计算机程序设计基础试题与答案,2018年4月自考计算机基础与程序设计02275试题及答案.doc...
  8. win10用Eclipse+OpenJTag对S3C2440开发板进行动态调试
  9. java递归实现多级菜单栏_Java构建树形菜单以及支持多级菜单的实例代码
  10. window对象与document对象的区别
  11. 基于arcpy包在arcmap里面实现图层的随机选取
  12. Python百度语音合成
  13. 计算机网络(自顶向下方法)学习笔记
  14. RemObjects SDK ThDataSet总结
  15. 无线摄像头服务器关闭,监控摄像头服务器停止
  16. 一阶滤波算法公式推导
  17. java面试常见知识点
  18. 三星android手机工程模式设置中文,三星工程模式怎么进入?三星手机进入工程模式方法...
  19. vcard文件怎么导入手机_如何在Outlook 2013中将联系人导出到vCard(.vcf)文件或从vCard文件导入联系人...
  20. Python-docx 读写 Word 文档:插入图片、表格,设置表格样式,章节,页眉页脚等

热门文章

  1. HashMap之containsKey
  2. 二维码生成插件qrious
  3. div+css网页设计例子
  4. 家用计算机怎么关机,电脑要如何设置定时关机
  5. macOS - pip install scipy Error: No BLAS/LAPACK libraries found
  6. 人工智能技术在建筑能源管理中的应用场景
  7. 干货!C++程序的耦合性设计
  8. Redis Desktop Manager(Redis可视化工具)安装及使用教程
  9. 超声波换能器和超声波传感器的详细区别
  10. Apple Developer 注册及DUNS编码申请