一、信息组织的三种形式

信息一般为了方便管理、存储、理解和运用,都采用了一定的存取方式,就好比HTML文件里面的信息都是采用了标签的形式进行存储的。
一般来说,信息标记主要有三种方式:
①XML
XML文件我们已经不是第一次见了,HTML本身也属于一种XML文件,这种方式以标签的形式组织管理信息,通过标签之间的嵌套关系来组织信息,在标签内部可以使用属性来对标签进行进一步的修改,除此之外还可以使用<!-- -->的形式来进行注释。

②JSON
在做毕设的过程中也使用过这种组织形式,微信小程序的数据库使用的也是这种形式。JSON属于有类型的键值对,是key和value组成的对,不管是键还是值,都需要使用双引号来表示类型是字符串,当然也存在一个键对应多个值的情况,这种情况下值使用列表来表示,列表内部依然需要使用双引号来表示字符串类型。
除此之外,JSON也支持嵌套的信息,有点像C里面的结构体,通过大括号与逗号的嵌套来表示复杂的关系。

这张图展示了JSON的三种形式,第一种是最普通的形式,有一个键叫做key,然后key的值为value。第二种key的值变成了value1和value2。第三种就是一种复合结构,这个JSON键值对的意思是key是一个键,这个键的值是由其它键值对组成的,对于这个key,它的值是由一个值为subvalue的叫做subkey的键值对构成的。

③YAML
YAML和JSON很像,属于一种无类型键值对,和JSON最大的区别就是不需要使用双引号表示字符串。另外YAML使用缩进来表示所属关系,这里和Python的缩进同一个道理。使用-表示并列关系,使用|表示整块数据,使用#表示注释。

上图展示的就是三个YAML键值对,第一个键的值为value,而第二个键使用了一个注释,真正的value是下面并列的value1和value2,第三个键是由键值对构成的,内部包含了一个值为subvalue名字为subkey的键值对。

三种信息组织形式各有利弊,首先XML是最常见的,使用成对的标签来组织信息,好处是比较清晰易懂,但是每个标签都需要规定名称,有时候会导致标签占用的存储量比信息占用的存储量还要大很多。使用JSON则大大减少了无用信息,因为将原本的标签换成了键值对,至少减少了一半的无关内容,另外这种键值对的形式很适合与程序的处理。YAML由于是无类型的,所以文本比例信息最高。
一般XML用于互联网上的信息交互与传递,JSON用于移动应用云端和节点的信息通信,但是没有注释,YAML主要用于各类系统的配置文件,并且有注释可读性变高。

二、信息提取的一般方法

所谓信息提取,就是从标记后的信息中提取所关注的内容。一般的信息提取方法有三种:
①完整解析
先将信息的标记形式完整解析,再提取关键信息。这种方式一般要使用标记解析器,信息的解析比较准确,但是提取的过程较慢。
②直接搜索
无视标记,直接搜索关键的信息,这种方式提取过程简单,速度也很快,但是准确性有时候不高。
③融合方法
融合上面两种方法,需要使用标记解析器和文本查找函数。

结合前面使用过的bs4库,一般常用的查找函数是find_all()方法,这个方法返回值是一个列表,列表里面存储了查找的结果。

这段代码先将获取的网页信息利用BeautifulSoup方法转换为soup,之后就可以调用find_all方法,查找其中的元素,这里是查找了所有a标签,直接用标签名字进行查找,如果需要一次查找多个也可以将名字存在一个列表中,然后将列表作为参数进行查找。

find_all方法一共有五个参数:
①name
用于对某个标签的名称进行查询,返回的是所有目标标签的字符串组成的列表。
②attrs
对标签属性值进行检索,这里要注意,attrs是第二个参数,所以第一个参数需要先写好才能写第二个,第一个如果能够指明标签名,则查找的结果是符合attrs的某类标签组成的列表,也可以指定一个True,这样查找的就是所有attrs为目标值的标签。

图中所示的第一个查找,查找的是所有属性值含有course的标签,如果不写第一个参数也可以使用下面的方式:

③recursive
是否对子孙全部搜索,默认为True,简单来说就是搜索的范围,为False时只搜索儿子节点。

④string
在字符串区域中进行检索,这里的检索一定是完全按照格式进行的,连空格也要完全一样。
⑤扩展方法
这部分扩展方法和前面对标签树的遍历是一个思路,放一张截图:

三、信息提取实例:爬取大学排名信息

这个实例是网课上的实例,主要功能是访问一个大学排名的网站,将里面的排名信息提取出来,用列表的形式格式化输出。
从功能来看,程序主要是三个部分来实现的,首先要从网络上获取大学排名网页的信息,之后对网页信息进行筛选,最后格式化输出。所以采用三个函数去实现。

import requests
import bs4
from bs4 import BeautifulSoupdef getHtmlText(url):try:r = requests.get(url)r.raise_for_status()r.encoding = r.apparent_encodingreturn r.textexcept:return ""def fillUnivList(ulist, html):soup = BeautifulSoup(html, "html.parser")for tr in soup.find('tbody').children:if isinstance(tr, bs4.element.Tag):tds = tr('td')ulist.append([tds[0].string, tds[1].string, tds[3].string])def printUnivList(ulist, num):print("{:^10}\t{:^6}\t{:^10}".format("排名", "学校名称", "总分"))for i in range(num):u = ulist[i]print("{:^10}\t{:^6}\t{:^10}".format(u[0], u[1], u[2]))def main():uinfo = []url = 'https://www.zuihaodaxue.cn/zuihaodaxuepaiming2016.html'html = getHtmlText(url)fillUnivList(uinfo, html)printUnivList(uinfo, 20)main()

因为这个获取排名的网站已经没有了,现在是404,所以程序处在一个不能运行的状态,主要是记录一下代码中的比较重点的部分。在fillUnivList函数中,使用了一个isinstance()的函数,这个函数用于检测一个标签是不是bs4库中有的标签,采用这个函数目的是将混入其中的字符串去掉,只对正确的标签进行检测,这个函数在bs4库中,需要单独引入这个库。

【网络爬虫与信息提取】信息的组织与提取相关推荐

  1. python医疗发票 信息抽取_PYTHON网络爬虫与信息提取[信息的组织与提取](单元五)...

    1 三种信息类型的简介 xml : extensible markup language 与html非常相似 现有html后有xml xml是html发展来的 扩展 通用 json  类型 javas ...

  2. Python网络爬虫与信息提取

    1.Requests库入门 Requests安装 用管理员身份打开命令提示符: pip install requests 测试:打开IDLE: >>> import requests ...

  3. Python网络爬虫与信息提取笔记08-实例2:淘宝商品比价定向爬虫

    Python网络爬虫与信息提取笔记01-Requests库入门 Python网络爬虫与信息提取笔记02-网络爬虫之"盗亦有道" Python网络爬虫与信息提取笔记03-Reques ...

  4. python网络爬虫与信息提取_北京理工大学_Python网络爬虫与信息提取(一)

    学习 北京理工大学 嵩天 课程笔记 课程体系结构: 1.Requests框架:自动爬取HTML页面与自动网络请求提交 2.robots.txt:网络爬虫排除标准 3.BeautifulSoup框架:解 ...

  5. Python网络爬虫与信息提取笔记(续篇)(文末附教学视频)只供教学讲解,请勿对有robots协议的网站(如淘宝网)造成骚扰

    接上篇博客:Python网络爬虫与信息提取笔记(文末附教学视频) 14:基于bs4库的HTML内容遍历方法 标签树的下行遍历: 用len(soup.body.contents)返回body标签的儿子节 ...

  6. python网络爬虫与信息提取(笔记)【未完】

    目录 python网络爬虫与信息提取 Requests库入门 HTTP协议及Requests库方法 Requests库的get()方法 Requests库的安装 Requests库主要方法解析 爬取网 ...

  7. Python 网络爬虫笔记4 -- 信息标记与提取

    Python 网络爬虫笔记4 – 信息标记与提取 Python 网络爬虫系列笔记是笔者在学习嵩天老师的<Python网络爬虫与信息提取>课程及笔者实践网络爬虫的笔记. 课程链接:Pytho ...

  8. python 网页爬虫作业调度_第3次作业-MOOC学习笔记:Python网络爬虫与信息提取

    1.注册中国大学MOOC 2.选择北京理工大学嵩天老师的<Python网络爬虫与信息提取>MOOC课程 3.学习完成第0周至第4周的课程内容,并完成各周作业. 4.提供图片或网站显示的学习 ...

  9. Python网络爬虫与信息提取(中国大学mooc)

    目录 目录 Python网络爬虫与信息提取 淘宝商品比价定向爬虫 目标获取淘宝搜索页面的信息 理解淘宝的搜索接口翻页的处理 技术路线requests-refootnote 代码如下 股票数据定向爬虫 ...

  10. 北京理工大学·Python网络爬虫与信息提取·知识整理

    学习目标: python爬虫部分的学习 学习内容: mooc北京理工大学·Python网络爬虫与信息提取 对Scrapy内核依然一知半解,但mooc内容已经学完整理 后续将对Scrapy继续进行学习 ...

最新文章

  1. 看到这些代码,我自叹不如!!!
  2. python表白-python3实现表白神器
  3. 标准PSO辨识NARMAX模型源码程序
  4. Mac OS X安装之虚拟机环境下的总结
  5. c++ 一个函数包括多个返回值判断_Python函数的概念和使用
  6. LeetCode 2097. 合法重新排列数对(欧拉路径)
  7. 张一鸣这一条微博,阿里P8的我,竟然想了一夜
  8. thinkphp v5.0.11漏洞_ThinkPHP(5.1.x ~ 5.1.31 5.0.x ~ 5.0.23)GetShell漏洞
  9. HTML表格、表单,以及新表单属性
  10. Photoshop制作八张一寸证件照
  11. C#学习基本概念---xcopy(复制文件和目录树)
  12. Rinetd.exe 通过 instsrv.exe/srvany.exe 注册服务实现稳定端口转发
  13. 【全网最强C语言学习】C语言入门(工具)——库函数字典MSDN
  14. Lottie 动画在项目中的使用总结
  15. 考研英语 - word-list-30
  16. 华为员工违规领夜宵被发现后,被罚冻薪降考评,终身不得领夜宵,HR:哪个员工上班健身,定性考勤造假...
  17. 如何管理NVivo的查询结果
  18. 学习实践-Vicuna【小羊驼】(部署+运行)
  19. 1000瓶药中找出一瓶毒药,10只老鼠做试验
  20. Arthas-idea

热门文章

  1. 自我管理 - 希望2015年自己能够做到的几点目标
  2. 华为防火墙反病毒(个人思绪总结)
  3. 拆解洪恩教育2020年财报:Q4亏损扩大7倍,负债增至4亿元
  4. ESP32-WROOM-32E,WIFI基本功能实现,采坑经验
  5. 如何区分独立服务器与VPS主机?
  6. java503错误是什么_java - Tomcat 503错误 - 堆栈内存溢出
  7. jupyter notebook修改黑色背景和字体大小
  8. pycharm正则表达式检索
  9. React-笔记整理
  10. 区块链教程之Bitcoin公钥和地址生成