R爬虫从0开始-HTML

在我们‘网上冲浪’的时候,我们阅读和操作基本都会涉及到一个标准:超文本标记语言 (Hyper Text Markup Language ,HTML)

HTML是一种规范,一种标准,它通过标记符号来标记要显示的网页中的各个部分。网页文件本身是一种文本文件,通过在文本文件中添加标记符,可以告诉浏览器如何显示其中的内容(如:文字如何处理,画面如何安排,图片如何显示等)。

想要网络数据采集还是需要一些html网页基础,尤其是网页布局,因为我们一般需要逐步定位我们需要内容所属标签,从而获得所需要的内容。本章从网络数据采集角度,就HTML的基础知识进行简单介绍。

2.1 浏览器显示及源代码

打开大家习惯使用的一款浏览器,随便打开一个网页例如:https://www.btime.com/?from=haozcxw,单击右键查看源文件,当前网页的HTML代码就展示在你眼前了。

2.2 语法规则

2.2.1 标签、元素和属性

HTML中标签指的是会指定其中包装的文本作为在浏览器分页的标题栏显示的标题,在实际语法中标签通常以一个符号包括起来,起始标签、内容和终止标签组合起来则成为元素,如下代码所示:

首页

能够把首页和另一个指向的地址超链接联系起来。href="https://www.btime.com/这个属性制定锚链接

2.2.2 树形结构

先忽略第一行。这里红框例子里的第一个元素就是

这个元素的起始标签和终止标签之间又有几个标签分别起始和闭合:,

,.。要描述一个html网页的多层结构,用树比如是一种较好的方式。

是根元素,它带着三个分支,,

。而红框框的

,又是属于上面

的枝干

在结构良好并核发的html文件中,所有元素必须严格嵌套。一堆起始闭合标签必须包含在另外一对起始标签内。下面的例子就是一个错误的结构。

2.2.3 注释

html提供了向代码插入注释的能力,但是注释本身是不会被解析的,也是在浏览器中不会被显示出来。用结尾。如下图的‘精彩速递’:

2.2.4 保留特殊符

在html是用来构成标签的。如果我们想显示:5 3下面这么写是 不行的:

5 3

在 HTML 中不能使用小于号(),这是因为浏览器会误认为它们是标签。如果希望正确地显示预留字符,我们必须在 HTML 源代码中使用字符实体(character entities)。正确的写法是如下:

5 < 6 but 7 > 3

以下是部分html中的字符实体:

2.2.5 文档类型定义

在网页第一行是。它是一个文档类型的定义(DTD).DTD会告诉浏览器遵循是的是那个版本的htmlb标准。

HTML 5版:

严格的HTML 4.01版:

2.3 标签和属性

2.3.1 锚标签

锚标签可以让html链接到另一个文档中,或者设定一个引用点,或者可以链接到文档中的锚点,使得网站内的导航更加方便快捷。

2.3.2 外部引用标签

标签用于链接并引入信息及外部文件。比如网站的授权信息、列出网页作者的文档,或者帮助页面,图表等。

比如第一个link就是指向一个图表,点击href可以进去查看,实际是一个网站的图表:

2.3.3 强调标签、和

、和这样的标签其实是布局标签,对应的是出题、斜体和家中的强调。

2.3.4 段落标签

标签会标记其中包含的内容为一个段落,并确保在其中内容的前后都有换行:

2.3.5 标题标签、、等

为了定义不同级别的标签--从1-6级,html提供了一系列的标签。

2.3.6 组织性标签

div标签可以把文档分割为独立的、不同的部分。它可以用作严格的组织工具,并且不使用任何格式与其关联。在html中如果用 id 或 class 来标记 div,那么该标签的作用会变得更加有效。div是一个块级元素。这意味着它的内容自动地开始 一个新行。实际上,换行是div固有的唯一格式表现。可以通过div的 class 或 id应用额外的样式。

2.3.7 表格标签和

这一组标签能让html显示一个表格。用产生一个标签。产生一个新的行,定义一td个单元,活用定义表头的一个单元。例如第一章我们抓取的那个遗产文化中就是运中的上述标签。

2.3.8 通过

,和列举内容

包装排序列表,

包装费排序列表,描述列表

2.4 解析

2.4.1解析简介

readLines()是会把输入文件的每一行分别映射到一个字符向量的一个值里。虽然很简单但是readLines()解析函数给文档创建的是一个扁平化的表示法,这种形式对从中提取信息用处不大。因为readLines对不同的标签元素是不了解的,它产生的结果不能反映套嵌的标签对应的文档内部层次结构。

# readLines 解析

url

word

head(word)

xml组件提供了一个和libxml2库的借口,这个库是C语言编写的功能强大解析库。能够应付很多解析问题。

# XML htmlParsh 解析

library(XML)

word

print(word)

2.4.2 丢弃节点

在解析阶段,丢弃网页中不需要的部分有助于消除内存不足的问题并且可以加快速度。在构建树的阶段,处理器为处理节点(如删除,添加,修改)提供了方便实用的方法。处理器函数会规范C语言层次节点结构转化为R对象的过程。所有节点都会被映射到列表结构,而我们可以控制这个过程。

考虑在html文件中删除节点的情况。我们在解析阶段,可以轻松地去掉这个节点及其子节点。

h1

paresd_word

paresd_word$children

我们通过handles参数吧h1对象传递给htmlTreeParse函数,在输出里面观测到body已经不再树的一部分了。处理器会把替换成null

以上就是对HTML的简单介绍。了解html,这也有助于我们后续对网络数据采集的实操与理解。下一章节我们走向是xml和json,欢迎小伙伴们位临指导!

参考文献:

《基于R语言的自动数据收集》

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180410G1EI2O00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券