HTML基础与R语言解析 | R语千寻

论坛 期权论坛 期权     
狗熊会   2019-6-9 21:28   723   0



在数据科学与网络技术的各项技能中,大家对爬虫的兴趣要大于其他技能。无论学术研究还是商业分析,数据搜集永远是第一个需要解决的问题。通常来说,一般的数据可以从国家和地方统计局、统计年鉴、单位年报中找到,但对于特定领域的数据分析与挖掘工作,所需要的数据可能并不是简单的搜索就可以获取的。这时就需要学习网络数据采集技术了,也就是网络爬虫。很多读者已经习惯使用R作为数据分析工具了,如果R语言能够像Python一样具备强大的爬虫生态,那就完美了。

尽管R具有开源、扩展包丰富、好学易上手等特点,但R的爬虫生态不如Python却是不争的事实。Python中的scrapy框架就足以让人满心欢喜,但R还没有比较流行的爬虫框架。尽管如此,如果结合R现有的爬虫条件,多加探索,还是可以解决当前大部分的爬虫需求的。
下面介绍爬虫技术的第一个基础知识:HTML。作为网络前端技术最核心的三大技术之一(HTML、CSS和JavaScript),HTML的重要性不言而喻。如果说前端开发过程是一个造房子的过程,那么HTML就是这所房子的骨架结构,从地基到天花板都需要结构明晰;而房子造好后的装修则是CSS,比如说给地板贴瓷砖、给墙壁贴墙纸等。进一步,给房子加上更多的动态以及视觉效果,比如灯照变化、音乐渲染等功能,这主要就是JavaScript做的事情。


图1 前端技术三驾马车
那么到底什么是HTML呢?它跟R语言爬虫又有什么关系呢?HTML的全称是超文本标记语言(Hyper Text Markup Language),是一种用于在网页上展示内容的语言。HTML并不是一种编程语言,而是一种描述内容并定义其表征的标记语言。HTML只规定了网页的结构,让网页在哪里显示标题和内容,显示什么内容,至于怎么显示,就不是HTML管辖的范围了。
HTML的语法规则1在爬取数据之前,需要先了解HTML的语法规则,才能够“对症下药”。在任意一款浏览器中,随手打开一个网页,单击鼠标右键查看源文件或者审查元素,当前网页的HTML代码就出现了。下面以电影《芳华》为例,展示一下HTML的基本原理。


图2 《芳华》海报
在豆瓣电影上查看《芳华》页面的HTML源码,对比网页页面元素和HTML源码的对应关系。图3展示的是芳华在豆瓣电影上介绍的HTML代码一部分。


图3 豆瓣电影关于《芳华》介绍的HTML源码
图3就是单击鼠标右键审查元素之后的界面,可以看到在网页端显示的“冯小刚”在HTML中对应的位置,嵌套在层层在HTML代码之中(此处结果使用谷歌chrome浏览器展示)。
所以一个专门抓取导演信息的爬虫要做的事情很简单,就是找到“冯小刚”所嵌套的位置,然后把他请出来。下面来简单学习HTML的语法结构。
相较于编程语言的语法,HTML的语法堪称简单易懂又好学。简单而言,从内容上看,HTML是标签、元素和属性的组合;从结构上看,HTML是一个树形组织结构。了解了这些,再稍微注意一下HTML的注释方式、保留字符和文档定义,就掌握了HTML的知识概貌。下面从内容和结构上分别具体说明一下。
1.标签、元素和属性
HTML中的标签可以理解为一种标题,在实际语法中标签通常以一对“< >”符号包括起来,起始标签、内容和终止标签组合起来则成为元素,如图4所示的代码。


图4 HTML元素
起始标签和终止标签都用“< >”符号包裹,以便和内容进行区分,不同的是终止标签会有一个“/”符号以示区别。大部分标签都成对出现,但也有例外,比如说标签表示换行,它就不需要一个标签来表示终止。
常用的HTML标签如表1所示(更多标签请参考HTML手册http://www.w3school.com.cn/tags/)。
表1 常用HTML标签


标签最重要的一个特性是属性。继续看图4所示的代码:标签能够把相关的文本(这里是“冯小刚”)和一个指向另一个地址的超链接关联起来。href="/celebrity/1274255/"这个属性指定链接,浏览器会自动把这类元素转化为带有下划线并且可以点击的样式,而rel="v:directedBy"这个属性则是用于指定当前文档与被链接文档的关系。总而言之,属性就是让标签能够描述其内容处理方式的选项。具体属性的作用则根据相应的标签来定。
属性总是处于起始标签的内部、标签名的右侧。一个标签拥有多个属性也是常见操作,多个属性之间用空格分开(见图5)。


图5 标签的属性
2. 树形结构
就像文档结构图(图6)一样,HTML最大的特点就是呈现为树形结构。


图6 文档结构图
一个简单的HTML结构示例如图7所示。


图7 HTML的树形结构
图7中,第一个元素是元素,在这个元素的起始和终止标签内,又有几个标签分别起始和终止:和。和标签作为同级标签都被包含在元素内,标签则包含在标签内。一个典型的树形结构就这样被描述出来了。
在结构良好并且合法的HTML文件中,所有元素相互之间必须是严格嵌套的,即一对起始标签和终止标签必须完全包含在另一对起始和终止标签内,像数学算式中的层层括号一样。
HTML除了以上这些基本知识,还有一些包括注释、保留字符和特殊字符、文档定义类型等其他细节知识值得注意,这里不再一一罗列。
R语言中HTML的解析2熟悉了基本的HTML结构之后,下面来看在R语言中HTML该如何解析。对于HTML,R语言无法直接分析,而是需要通过转化,这个过程就是HTML解析。具体而言,为了将HTML文件转为结构化数据,需运用一个能够理解HTML结构含义的程序,并重建HTML文件隐含的层次结构,使得HTML内容转化为R语言可以分析的形式。在R语言中,通常使用XML包中的htmlParse()函数来解析一个HTML文件,XML有着以C语言为基础的libxml2库的接口,功能十分强大。下面展示一个简单的R代码示例:


通过以上代码,一个完整的HTML文档就被解析到R中了。解析后,HTML文件被转化为R语言中的一个对象。

HTML作为所有网络爬虫的起步知识,对于后面的爬虫理解和操作具有基础性的意义。虽然数据科学不是前端开发,但是掌握基本的网页知识是非常有必要的。



熊小编1分钟前
如果您对【R语千寻】的内容感兴趣,请在微信公号内回复“R”,即可查看往期精彩文章。





识别下方二维码成为狗熊会会员!
友情提示:
个人会员不提供数据、代码,
视频only!
个人会员网址:http://teach.xiong99.com.cn


点击“阅读原文”,成为狗熊会会员!
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:
帖子:
精华:
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP