首先要知道的是,有很多从网上抓取数据的方法,抓取的源主要有两种,一种是html网页,一种是json。
从网上抓这两种东西时,你不一定要全部用R,用类似java,php,python之类的也能很快的完成任务,问题的关键是对于文档的解析。至于通过网站获取json接口,这个就要老手的经验了。
文档对象模型
使用任何语言,或者工具都不要紧,重要的是你必须了解文档对象模型——这个至关重要!如果你深入的了解了文档对象模型,从网上抓取数据就像回家一样的轻松
上图就是文档对象模型的一个直观印象,你打开的任何一个网页都可以转换成像是上面这样的图。一个文档就是一个页面,然后从根出发,一直向下细分。如果你有学过数据结构的化,那就太好了,如果没学过也没什么关系,你要知道的是它是一棵“树”——如果倒过来会更形象,我们总是从根部出发来找寻东西。比如假定我要访问那个写着“文本:”我的链接“的节点,我们需要从根元素<html>开始,然后找到<body>元素,然后找到元素<a>,然后找到我们要找的这个节点,这些节点就是一个路径,指引我们可以从根节点找到我们需要的节点。路径至关重要,一旦你理解了它,你就可以在几分钟内使用java的jsoup,或者是php的xpath之类(都是用于解析文档的工具),找到你想要得,它们说白了,就是通过路径找到你想要的节点,而你需要的数据就是这些节点的属性罢了!
我再引用W3School 提供的一个例子
<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
<book>
<title>Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
</bookstore>
这个是一个xml的文件,它是像上面那样用图片表述文档的另一种方式,它们没有什么不同。第一行规定了它是个xml文件,我们从<bookstore>开始,它会是根节点,然后<bookstore>下面有<book> ,<book>下面有诸如<title>,<author>这样的节点。
然后以下,直接引用w3school的原文,它介绍了节点的分类,类似于人类社会族系的分类,都很简单:
上面的XML文档中的节点例子:
<bookstore> (文档节点)
<author>J K. Rowling</author> (元素节点) (属性节点)
基本值(或称原子值,Atomic value)基本值是无父或无子的节点。
基本值的例子:
J K. Rowling "en"
项目(Item)
项目是基本值或者节点。
节点关系
父(Parent)每个元素以及属性都有一个父。
在下面的例子中,book 元素是 title、author、year 以及 price 元素的父:
<book> <title>Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book>
子(Children)元素节点可有零个、一个或多个子。
在下面的例子中,title、author、year 以及 price 元素都是 book 元素的子:
<book> <title>Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book>
同胞(Sibling)拥有相同的父的节点
在下面的例子中,title、author、year 以及 price 元素都是同胞:
<book> <title>Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book>
先辈(Ancestor)某节点的父、父的父,等等。
在下面的例子中,title 元素的先辈是 book 元素和 bookstore 元素:
<bookstore> <book> <title>Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book> </bookstore>
后代(Descendant)某个节点的子,子的子,等等。
在下面的例子中,bookstore 的后代是 book、title、author、year 以及 price 元素:
<bookstore> <book> <title>Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book> </bookstore>