第一天的工作:找到数据源,数据下载,数据处理。

数据源:"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与词典数据处理的更多相关文章

  1. “GIS DICTIONARY A-Z” 查询页面开发(2)——INSERT INTO数据库

    今日工作:数据库连接.数据写入 一.数据库连接:使用了pymysql库 from G2_dataClean import defList import pymysql db = pymysql.con ...

  2. “GIS DICTIONARY A-Z” 查询页面开发(3)—— 基础知识之服务器、IP地址、域名、DNS、端口以及Web程序的访问流程

    今天补一补基础知识: 一.服务器:能够提供服务的机器,取决于机器上安装的软件(服务软件).服务器响应服务请求,并进行处理. Web服务器:提供Web服务,即网站访问.常见Web服务软件:Apache( ...

  3. ASP.Net MVC开发基础学习笔记(7):数据查询页面

     前言 前面铺垫了那么多,今天我们就用MVC5 + EF6 + Bootstrap3来正式创建一个基本查询页面. 为什么从查询页面開始?嘿嘿.由于小弟的.Net生涯就是从查询页面開始的,记得正式工 ...

  4. 通用easyui查询页面组件

    easyui查询页面组件使用指南 本组件开发需求:信息系统的查询页面基本是包括:搜索区域,列表显示区域,按钮条. 1.录入一个查询语句(如:select * from Strudents),录入列表显 ...

  5. X5的UI部分和传统Web页面开发的差异

    http://doc.wex5.com/different-with-std-web-ui/#1 X5的UI部分和传统Web页面开发的差异 WeX5是跨端移动开发框架,BeX5是基于WeX5的企业快速 ...

  6. MVC5 + EF6 + Bootstrap3 (10) 数据查询页面

    文章来源:Slark.NET-博客园 http://www.cnblogs.com/slark/p/mvc5-ef6-bs3-get-started-search-page.html 系列教程:MVC ...

  7. 移动端页面开发适配 rem布局原理

    主题 HTML移动端页面开发适配 rem布局原理 什么是适配,为什么要适配 我们拿到的设计图一般是以640,750,1080分辨率为基准设计的,而现在的手机终端各式各样,分辨率不同,逻辑像素不同 ,适 ...

  8. 移动端web页面开发常用的头部标签设置

    在移动端web页面开发中,我们常需要设置各种头部标签以帮助浏览器更好的解析页面,将页面完美呈现,这里列出了工作中常用的各种头部标签,以备查询. viewport <meta name=" ...

  9. GIS历史概述与WebGis应用开发技术浅解

    声明:本篇在李晓晖的<杂谈WebGIS>,补充更多的资料说明.基于地图二次开发一直断断续续在做,这里算是补充一下基本功把.其实对于前端,WebGis开发都是api,抄demo,改.GIS深 ...

随机推荐

  1. django-debug-toolbar调试请求接口

    第一步: pip install django-debug-toolbar 安装完成,往下继续配置. 第二步: 打开项目,找到settings.py 文件.  找到: INSTALLED_APPS-- ...

  2. centos6中安装新版 Elasticsearch 7.x

    es出新版了,虽然公司里还是用的老版本,但是本地还是有必要自己安装了玩玩 下载地址:https://www.elastic.co/cn/downloads/elasticsearch 那么一般来说还是 ...

  3. 基于 SpringBoot2.0+优雅整合 SpringBoot+Mybatis

    SpringBoot 整合 Mybatis 有两种常用的方式,一种就是我们常见的 xml 的方式 ,还有一种是全注解的方式.我觉得这两者没有谁比谁好,在 SQL 语句不太长的情况下,我觉得全注解的方式 ...

  4. Executor多线程框架

    啥都别说了,上代码: import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; impor ...

  5. iis可以运行但是界面不能在桌面显示是怎么回事

    iis可以运行但是界面不能在桌面显示是怎么回事 引用:https://zhidao.baidu.com/question/1948053642075906588.html 在开始->运行 执行i ...

  6. react-native字体react-native-vector-icons在ios下的使用

    react-native字体react-native-vector-icons在ios下的使用 官网和网上有各种针对ios/android的安装和使用方法:能够使用了,基本就等于安装成功了. reac ...

  7. Docker容器内部端口映射到外部宿主机端口 - 运维笔记

    Docker允许通过外部访问容器或者容器之间互联的方式来提供网络服务.容器启动之后,容器中可以运行一些网络应用,通过-p或-P参数来指定端口映射. 注意:宿主机的一个端口只能映射到容器内部的某一个端口 ...

  8. thinkphp5用了哪些设计模式

    一.设计模式简介 首先我们来认识一下什么是设计模式:设计模式是一套被反复使用.容易被他人理解的.可靠的代码设计经验的总结.设计模式不是Java的专利,我们用面向对象的方法在PHP里也能很好的使用23种 ...

  9. APIO2019简要题解

    Luogu P5444 [APIO2019]奇怪装置 看到这种题,我们肯定会想到\((x,y)\)一定有循环 我们要找到循环节的长度 推一下发现\(x\)的循环节长为\(\frac{AB}{B+1}\ ...

  10. Java学习:递归

    递归的思想 以此类推是递归的基本思想. 具体来讲就是把规模大的问题转化为规模小的相似的子问题来解决.在函数实现时,因为解决大问题的方法和解决小问题的方法往往是同一个方法,所以就产生了函数调用它自身的情 ...