Python爬虫学习笔记(二):网页的信息

Python爬虫学习笔记(二):网页的信息

一.数据的类型

结构化数据、半结构化数据和非结构化数据

结构化数据

用统一的结构加以表示的数据

可以使用关系型数据库表示和存储,表现为二维形式的数据

数据以行为单位,一行数据表示一个实体的信息,每一行数据的属性是相同的

半结构化数据

是结构化数据的一种形式,结构与数据相交融,不需要区分“元数据”和“一般数据”,也被称为自描述的结构

结构难以纳入现有的各种描述框架,是一种标记服务的基础模型,用于Web上共享信息,包含相关标记,用来分隔语义元素以及对记录和字段进行分层

常见的半结构数据有HTML,XML和JSON等,实际上以树或图的结构来存储
<person>
	<name>YOU</name>
	<age>20</age>
    <gender>male</gender>
</person>
结点中属性的顺序不重要,不同的半结构化数据的属性的个数也不一定一样

这样的数据格式,使得半结构化数据的扩展性很好

非结构化数据

没有固定结构的数据

文档、图片、视频/音频等都属于非结构化数据

这类数据一般用二进制的数据格式整体进行存储,结构化和半结构数据之外的数据都是非结构化数据

二.XML,HTML,DOM

XML, HTML

XML(Extentsible Markup Language)可扩展标记语言,用来定义其它语言的一种元语言

没有标签集(tagset),没有语法规则(grammatical rule),但有句法规则(syntax rule)

XML文档并非一定要求有效(valid),有效文档是指其符合其文档类型定义(DTD)的文档,如果一个文档符合一个模式(schema)的规定,那么这个文档是模式有效的(schema valid)

XML文档对任何类型的应用以及正确的解析都必须是良构的(well-formed):每一个打开的标签都必须有匹配的结束标签,不得含有次序颠倒的标签,并且在语句构成上应符合技术规范的要求。

HTML(Hyper Text Mark-up Language)超文本标记语言,是WWW的描述语言

HTML与XML的区别

语法要求:

  1. HTML不区分大小写,XML严格区分

  2. HTML如果上下文清楚地显示出段落或者列表键在何处结尾,可以省略</p>或</li>之类的结束标记。XML是严格的树状结构,不能省略结束标记

  3. XML中拥有单个标记而没有匹配的结束标记的元素必须用一个/ 字符作为结尾

  4. XML属性值必须分装在引号中,HTML引号可用可不用

  5. HTML可以拥有不带值的属性名。XML所有的属性都必须带有相应的值

  6. XML文档中,空白部分不会被解析器自动删除,HTML会过滤掉空格

标记:

  1. HTML使用固有的标记,XML没有固有的标记

  2. HTML标签是预定义的, XML标签是自定义的、可扩展的

作用:

  1. HTML被设计用来显示数据,XML用来描述、存放数据,可以作为持久化的介质

  2. XML和HTML是两种不同用途的语言,XML可以视作对 HTML 的补充,HTML 的设计目标是显示数据并集中于数据外观,XML的设计目标是描述数据并集中于数据的内容

  3. XML是一种跨平台的,与软、硬件无关的,处理与传输信息的工具

  4. XML将成为最普遍的数据处理和数据传输的工具

DOM

文档对象模型(Document Object Model,DOM),处理可扩展标志语言的标准编程接口

网页上组织页面的对象被组织在一个树形结构中,用来表示文档中对象的标准模型称为DOM。

DOM= Document Object Model,文档对象模型,DOM以一种独立于平台和语言的方式访问和修改一个文档的内容和结构,表示和处理一个HTML或XML文档的常用方法

DOM可以用于任何编程语言,是以面向对象方式描述的文档模型。

定义了表示和修改文档所需的对象、这些对象的行为和属性以及这些对象之间的关系,

通过 JavaScript,可以对HTML文档进行添加、移除、改变或重排页面上的项目。为达到目的,JavaScript 需要获得对 HTML 文档中所有元素进行访问的入口,通过文档对象模型来获得(DOM)

三.JSON文件

JSON(JavaScript Object Notation, JS对象标记):轻量级的数据交换格式

基于ECMAScript (w3c制定的JS规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据

JSON的简洁和清晰的层次结构使其易于阅读和编写、机器解析和生成,能有效地提升网络传输效率

JSON 语法规则和JS对象

JS 语言中,一切都是对象,任何支持的类型都可以通过 JSON 来表示(字符串、数字、对象、数组等):

1.对象表示为键值对
2.数据由逗号分隔
3.花括号保存对象
4.方括号保存数组

JSON键值对是用来保存 JS 对象的一种方式,键/值对组合中的键名写在前面并用双引号 "" 包裹,使用冒号 : 分隔,然后紧接着值

{"Name": "YOU","age":"20"}

等价于JavaScript 语句:
{Name: "YOU","age":"20"}
JSONJS对象的字符串表示法,使用文本表示一个JS对象的信息,本质是字符串

var obj = {a: 'Hello', b: 'World'}; //对象,键名也可以使用引号包裹

var json = '{"a": "Hello", "b": "World"}'; //JSON 字符串,本质是字符串

Python中的JSON操作

import json   #引入json模块
jsonDict = {"Name": "YOU","age":"20"} #设置Python的字典类型

jsonDumps = json.dumps(jsonDict) #.dumps:将Python数据结构转换为JSON
print(jsonDumps)
 
jsonLoads = json.loads(jsonDumps) #.loads:将JSON编码的字符串转换回Python数据结构
for key,value in jsonLoads.items(): #.items:返回可遍历的(键, 值) 元组数组
    print(key,value)

{"Name": "YOU", "age": "20"}
Name YOU
age 20

JSON和XML的比较

可读性:JSON的语法格式和层次结构要比XML容易阅读

可扩展性: JSON可以存储Javascript复合对象,有着xml不可比拟的优势

编码难度:xml文档要多很多结构上的字符

有效数据率:JSON没有严格的闭合标签,让有效数据量与总数据包比大大提升,减少同等数据流量的情况下,网络的传输压力

XML的解析方式:

文档模型解析,通过父标签索引出一组标记
前提是要在预先知道文档结构的情况下使用,无法进行通用的封装

遍历节点(document 以及 childNodes),通过递归来实现
但解析出来的数据往往不能满足要求

不知道JSON的结构而去解析JSON的话,代码会变得冗余拖沓,得到的结果往往不能满足要求
<?xml version="1.0" encoding="utf-8"?>
<Person>
    <Name>YOUChanWill</Name>
    <AGE>
        <age>20</age>
        <number>
            <num>10</num>
            <num>16</num>
        </number>
    </AGE>
</Person>
{
    "Name": "YOUChanWill",
    "AGE": [{
        "age": "20",
        "number": {
            "num": ["10", "16"]
        }
    }]
}

JSON简单的语法格式和清晰的层次结构要比XML容易阅读,在数据交换方面,JSON可以大大得节约传输数据所占用的带宽

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值