“GIS DICTIONARY A-Z” 查询页面开发(1)——bs4与词典数据处理
第一天的工作:找到数据源,数据下载,数据处理。
数据源:"http://webhelp.esri.com/arcgisserver/9.3/java/geodatabases/definition_frame.htm"。
数据下载:右击网页另存为。
数据处理:bs4 + 对比观察 + chrome检查元素 + 写function写方法
一、bs4部分
from bs4 import BeautifulSoup
soup = BeautifulSoup(open('GIS_dictionary.html','r',encoding='UTF-8'),features="lxml")
#tag标签
GlossaryTerm_list = soup.find_all(attrs={'class':'GlossaryTerm'})#完整,1729个
Definition_list = soup.find_all(attrs={'class':'Definition'})#缺<ol>
二、对比观察 + 检查元素
在准备GlossaryTerm和Definition的一一对应时发现二者的数量对不上。观察分析后确定是网站的前端代码对不同形式的Definition有不同的处理方法:对有多项释义的词汇使用了<ol>有序列表,它不能直接被bs4的属性查找选择到。
三、写方法
第一块:因为词组和解释在同一前端代码段内,故使用".text"和".a.attrs['name']"完成第一部分的对应。
'''
完成Definition_list中已有的1610个解释的文本获取和词语对应
'''
defList = []
for i in Definition_list:
defi = i.text.strip('\n')#修饰definition
word = i.a.attrs['name'].replace('_',' ')#修饰glossary
defList.append([defi,word]) #抓取所有解释和词语在小列表,再存入大列表
if (i.text==''): #确保没有definition为空
print(i.a.attrs['name'])
#defList示例[["defi",'word'],["",''],["",''],["",'']...]
第二块:定义函数func_n(),清洗<ol>标签内的数据。其中使用了通过中间媒介list修改string的技巧和if筛查的方法。最后对应词组和相应的解释,完成项目的数据准备工作。明日计划:数据库。
'''
<ol>标签,将defList补充完整,从Ctrl+F得到共有119个<ol>标签
"1610+119=1729",成功!1729 == len(GlossaryTerm_list)
'''
#定义函数func_n
#格式化<ol>的definition:首位加"1.";将多个连续的"\n"收为一个;在"\n"后添加"2."等序号
def func_n(txt):
lstTxt = list(txt) #因为不能直接修改string,故将其打碎为list进行操作
n = len(lstTxt)
newlstTxt = ["1."] #添加首位的"1."
count = 2
for i in range(n-1):
if lstTxt[i]=='\n' and lstTxt[i]!=lstTxt[i+1] and lstTxt[i+1]!=' ': #保留单独的"\n",在其后添加序号;排除'\n'+' '的组合
newlstTxt.append('\n')
newlstTxt.append(str(count))
newlstTxt.append('.')
count += 1
if lstTxt[i]!='\n' and lstTxt[i]!=lstTxt[i+1] and lstTxt[i]!='\t': #放弃连续多个的"\n"、放弃所有的'\t'
newlstTxt.append(lstTxt[i])
newlstTxt.append(lstTxt[-1]) #添加for循环里没有的最后一位
strTxt = ''.join(newlstTxt) #''.join()函数将list变为string
return strTxt
#实操
ol_list = soup.find_all('ol')
for j in ol_list:
defi_ol = j.text.strip('\n')
defi_ol = func_n(defi_ol)
word_ol = j.a.attrs['name'].replace('_',' ')
defList.append([defi_ol,word_ol])
词典数据效果:
“GIS DICTIONARY A-Z” 查询页面开发(1)——bs4与词典数据处理的更多相关文章
- “GIS DICTIONARY A-Z” 查询页面开发(2)——INSERT INTO数据库
今日工作:数据库连接.数据写入 一.数据库连接:使用了pymysql库 from G2_dataClean import defList import pymysql db = pymysql.con ...
- “GIS DICTIONARY A-Z” 查询页面开发(3)—— 基础知识之服务器、IP地址、域名、DNS、端口以及Web程序的访问流程
今天补一补基础知识: 一.服务器:能够提供服务的机器,取决于机器上安装的软件(服务软件).服务器响应服务请求,并进行处理. Web服务器:提供Web服务,即网站访问.常见Web服务软件:Apache( ...
- ASP.Net MVC开发基础学习笔记(7):数据查询页面
前言 前面铺垫了那么多,今天我们就用MVC5 + EF6 + Bootstrap3来正式创建一个基本查询页面. 为什么从查询页面開始?嘿嘿.由于小弟的.Net生涯就是从查询页面開始的,记得正式工 ...
- 通用easyui查询页面组件
easyui查询页面组件使用指南 本组件开发需求:信息系统的查询页面基本是包括:搜索区域,列表显示区域,按钮条. 1.录入一个查询语句(如:select * from Strudents),录入列表显 ...
- X5的UI部分和传统Web页面开发的差异
http://doc.wex5.com/different-with-std-web-ui/#1 X5的UI部分和传统Web页面开发的差异 WeX5是跨端移动开发框架,BeX5是基于WeX5的企业快速 ...
- MVC5 + EF6 + Bootstrap3 (10) 数据查询页面
文章来源:Slark.NET-博客园 http://www.cnblogs.com/slark/p/mvc5-ef6-bs3-get-started-search-page.html 系列教程:MVC ...
- 移动端页面开发适配 rem布局原理
主题 HTML移动端页面开发适配 rem布局原理 什么是适配,为什么要适配 我们拿到的设计图一般是以640,750,1080分辨率为基准设计的,而现在的手机终端各式各样,分辨率不同,逻辑像素不同 ,适 ...
- 移动端web页面开发常用的头部标签设置
在移动端web页面开发中,我们常需要设置各种头部标签以帮助浏览器更好的解析页面,将页面完美呈现,这里列出了工作中常用的各种头部标签,以备查询. viewport <meta name=" ...
- GIS历史概述与WebGis应用开发技术浅解
声明:本篇在李晓晖的<杂谈WebGIS>,补充更多的资料说明.基于地图二次开发一直断断续续在做,这里算是补充一下基本功把.其实对于前端,WebGis开发都是api,抄demo,改.GIS深 ...
随机推荐
- GIL全局解释锁
目录 一 介绍 二 GIL介绍 三 GIL与多线程 四 多线程性能测试 一 介绍 ''' 定义: In CPython, the global interpreter lock, or GIL, is ...
- 【线段树】【P5522】[yLOI2019] 棠梨煎雪
C [yLOI2019] 棠梨煎雪 Background 岁岁花藻檐下共将棠梨煎雪 自总角至你我某日辗转天边 天淡天青 宿雨沾襟 一年一会信笺却只见寥寥数言 --银临<棠梨煎雪> Desc ...
- Vue实践TS中的一些常见错误解决方案
mixin报错 import { Component, Prop, Vue ,Mixins} from 'vue-property-decorator' import httpminix from ' ...
- VS Code 安装与配置(使用MSYS2环境与mingw-w64 编译环境)
更正了顺序,之前不知道怎么回事,内容顺序乱了 力求完美.详细,所以希望懂的人留言指点一下. 目前已经开始添加原理解释,希望大家能分享一些gcc gdb C语言等方面优秀链接 后续会慢慢增添内容,修正 ...
- 运维(SA)修仙 之路
运维(SA)修仙 之路: 大纲: 系统 ,网络 ,数据库,开发 系统 :linux(cent OS && ubuntu) 网络 :路由,防火墙,安全 数据库:mysql, mong ...
- zookeeper shell
1.启动zk客户端 ./zkCli.sh -server 192.168.67.35:2182,192.168.67.36:2182,192.168.67.37:2182 2.创建zk节点 cre ...
- 基于ZYNQ的uart传输任意长度的数据
1.参考 UG585 网络笔记 参考:ZYNQ进阶之路14–PS端uart串口接收不定长数据 2.理论知识 参见上一次实验:基于ZYNQ 的UART中断实验之串口写数据到DDR3中 3.实验目的 基于 ...
- cad.net IExtensionApplication接口的妙用 分开写"启动运行"函数
cad提供的 IExtensionApplication 接口 是不能实现一次以上的,那么这给编写代码带来了一种不好的情况是,每次都要去修改实现这个接口的类, 如果是一个小的测试功能,你又要去动前面的 ...
- VisualStudio更改项目文件夹名称
新建了一个空的解决方案(SolutionTest.sln),在文件夹Api中新建了一个webapi项目,物理位置为解决方案根目录下的叫Api文件夹里, 现在想把文件夹名由Api改为MyApi,需要做以 ...
- C# Convert.ChangeType()
Convert.ChangeType() 将未知类型转换为已知类型 ; object result = Convert.ChangeType(content, typeof(int)); 其他常用的转 ...