python爬虫实现火山周报表格程序
import requests,bs4,re,xlwt from bs4 import BeautifulSoup def getHTMLText(url): try: r=requests.get(url) r.raise_for_status() r.encoding=r.apparent_encoding return r.text except: print("request failed") def getLocation(addr): demo=getHTMLText(addr) a = re.findall(r"\d+.\d+°\w", demo) latitude = re.split("°", a[0])[0] + re.split("°", a[0])[1] longitude = re.split("°", a[1])[0] + re.split("°", a[1])[1] b = re.search(r"elev. \d+[.\d+] m", demo) ele = re.search(r"\d+[.\d+]", b.group()).group() + "m" return [latitude, longitude, ele] def getObjectData(soup): li=[] for tr in soup.find('tbody').children: if isinstance(tr,bs4.element.Tag): tds=tr('td') if len(tds)==1: continue addr="http://volcano.si.edu/"+tds[0].a.attrs['href'] ret=getLocation(addr) li.append([tds[0].string,tds[1].string,ret[0],ret[1],ret[2],tds[2].string]) return li def printUnivList(result,num): # print("{:^20}\t{:^20}\t{:^20}".format("Name","Location","Activity")) # print("火山名".ljust(30)+"\t"+"所属国家".ljust(40)+"\t"+"纬度".ljust(20)+"\t"+"经度".ljust(20)+"\t" # +" 海拔".ljust(20)+"\t"+"新增/持续".ljust(20)) print("火山名".ljust(30) + "所属国家".ljust(40) + "纬度".ljust(20) + "经度".ljust(20) + " 海拔".ljust(20) + "新增/持续".ljust(20)) for i in range(num): # print("{:^20}\t{:^20}\t{:^20}".format(result[i][0],result[i][1],result[i][2])) # print("{:^6}".format(result[i][0])) print(result[i][0].ljust(30)+"\t"+result[i][1].ljust(40)+"\t"+result[i][2].ljust(20)+"\t"+result[i][3].ljust(20) +"\t"+result[i][4].ljust(20)+"\t"+result[i][5].ljust(20)) return result.insert(0,["火山名","所属国家","纬度","经度","海拔","新增/持续"]) def data_write(file_path, datas): f = xlwt.Workbook() sheet1 = f.add_sheet(u'sheet1', cell_overwrite_ok=True) # 创建sheet # 将数据写入第 i 行,第 j 列 i = 0 for data in datas: for j in range(len(data)): sheet1.write(i, j, data[j]) i = i + 1 f.save(file_path) # 保存文件 url="http://volcano.si.edu/reports_weekly.cfm" demo = getHTMLText(url) soup = BeautifulSoup(demo,"html.parser") result = getObjectData(soup) full_result=printUnivList(result,len(result)) file_path='/home/guoming/volcano1.xls' data_write(file_path,result)
软件运行后屏幕打印如下信息:
火山名 所属国家 纬度 经度 海拔 新增/持续
Fernandina Ecuador 0.37S 91.55W 1476m New
Krakatau Indonesia 6.102S 105.423E 155m New
Kuchinoerabujima Ryukyu Islands (Japan) 30.443N 130.217E 657m New
Taal Luzon (Philippines) 14.002N 120.993E 311m New
Aira Kyushu (Japan) 31.593N 130.657E 1117m Ongoing
Dukono Halmahera (Indonesia) 1.693N 127.894E 1229m Ongoing
Ebeko Paramushir Island (Russia) 50.686N 156.014E 1103m Ongoing
Karangetang Siau Island (Indonesia) 2.781N 125.407E 1797m Ongoing
Klyuchevskoy Central Kamchatka (Russia) 56.056N 160.642E 4754m Ongoing
Popocatepetl Mexico 19.023N 98.622W 5393m Ongoing
Sabancaya Peru 15.787S 71.857W 5960m Ongoing
Sangay Ecuador 2.005S 78.341W 5286m Ongoing
Semisopochnoi United States 51.93N 179.58E 1221m Ongoing
Sheveluch Central Kamchatka (Russia) 56.653N 161.36E 3283m Ongoing
Shishaldin Fox Islands (USA) 54.756N 163.97W 2857m Ongoing
Suwanosejima Ryukyu Islands (Japan) 29.638N 129.714E 796m Ongoing
White Island North Island (New Zealand) 37.52S 177.18E 294m Ongoing
程序获取了http://volcano.si.edu/reports_weekly.cfm中全球火山活动信息,并制作成表格,生成volcano1.xml文件
原文地址:https://www.cnblogs.com/iceberg710815/p/12209643.html
- SSDB图形界面管理工具:phpssdbadmin安装部署
- [Go 语言社区] 初始化内存数据--游戏列表数据
- SSDB安装配置记录
- Python标准库笔记(3) — datetime模块
- Django 1.10中文文档-第一个应用Part4-表单和通用视图
- Python标准库笔记(2) — re模块
- Python爬虫—破解JS加密的Cookie
- Go语言中json转成map结构
- rpc-dubbo简单入门
- Django 1.10中文文档-第一个应用Part3-视图和模板
- Go语言对JSON进行编码和解码
- [Go 语言社区]服务器自测JS 工程
- Django 1.10中文文档-第一个应用Part2-模型和管理站点
- 亿以内所有素数(Go语言版)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【腾讯】在前端开发中,如何获取浏览器的唯一标识
- 如何实现表格单双行条纹样式
- Angular 容易忽略的知识点
- 语雀自动同步到hexo博客
- 推荐 3 款超好用的 Docker 图形化管理工具
- python标准库之glob介绍
- Python 为什么只需一条语句“a,b=b,a”,就能直接交换两个变量?
- 使用List中的remove方法遇到的坑,不信你没有踩过!
- python opencv 图像尺寸变换
- OpenCv保存图像
- 机器学习|KNN
- docker 查看容器日志
- consul配置ACL
- CentOS7.5更改python版本后及yum不能用的解决办法,非编译!
- nginx 配置websocket