AutomatedDataCollectionwithR這本書的第一章趣兄,introduction。
Disseminating
HTML悼嫉、XML艇潭、JSON等
HTML是我們?cè)跒g覽網(wǎng)頁(yè)時(shí),用來(lái)組織網(wǎng)頁(yè)結(jié)構(gòu)的輕量型標(biāo)記語(yǔ)言戏蔑,比如texts, tables, lists, links等都可以被提取出來(lái):
#read_html和htmlParse功能一樣
library(rvest) # the new package, version 0.3.0
# read_html() from the rvest package is the new htmlParse() from the XML package
#get table
tables <- html_table(heritage_parsed, fill = TRUE) # html_table() from the rvest package, which replaces readHTMLTable() from the XML package
#舉個(gè)栗子蹋凝,提取簡(jiǎn)書上一個(gè)網(wǎng)頁(yè)的table:
jianshu<- read_html("http://www.reibang.com/p/8a898b204285", encoding = "UTF-8")
tables <- html_table(jianshu,fill = TRUE)
Chiptable <- tables[[1]]
XML和HTML比較像,用于網(wǎng)絡(luò)數(shù)據(jù)傳輸总棵,但html主要是展示網(wǎng)頁(yè)鳍寂,而xml主要是存儲(chǔ)數(shù)據(jù)。html是為了展示出document情龄,而xml相當(dāng)于是一些包裹在tag(tag就是html里面對(duì)應(yīng)結(jié)構(gòu)組分的標(biāo)簽迄汛,比如table, title, links)里面的data。而且xml的tag更多樣骤视,相比html存儲(chǔ)網(wǎng)頁(yè)數(shù)據(jù)更靈活:
Thus, HTML documents are interpreted and transformed into pretty-looking output by browsers, whereas XML is “just” data wrapped in user-defined tags. The user-defined tags
make XML much more flexible for storing data than HTML.
另一個(gè)常見的數(shù)據(jù)存儲(chǔ)和交換的格式是JavaScript Object Notation鞍爱,簡(jiǎn)稱JSON。
Like XML, JSON is used by many web applications to provide data for web developers. Imagine both XML and JSON as standards that define containers for plain text data.
比如開發(fā)者想分析Twitter上的數(shù)據(jù)专酗,就從Twitter構(gòu)建的界面上獲取必要的數(shù)據(jù)睹逃,這些數(shù)據(jù)被Twitter以JSON的格式存儲(chǔ),從而可被開發(fā)者利用笼裳。XML和JSON都是應(yīng)用非常廣泛的數(shù)據(jù)傳輸格式唯卖,因?yàn)樗麄儗?duì)廣大編程語(yǔ)言包括R都兼容粱玲。
AJAX比較復(fù)雜躬柬,是創(chuàng)建動(dòng)態(tài)網(wǎng)頁(yè)必須的,現(xiàn)代網(wǎng)頁(yè)應(yīng)用中廣泛抽减,和經(jīng)典的html以及xml的邏輯都不太一樣允青,對(duì)于爬蟲來(lái)說是個(gè)麻煩的東西
AJAX = 異步 JavaScript 和 XML。
AJAX 是一種用于創(chuàng)建快速動(dòng)態(tài)網(wǎng)頁(yè)的技術(shù)卵沉。
通過在后臺(tái)與服務(wù)器進(jìn)行少量數(shù)據(jù)交換颠锉,AJAX 可以使網(wǎng)頁(yè)實(shí)現(xiàn)異步更新法牲。這意味著可以在不重新加載整個(gè)網(wǎng)頁(yè)的情況下,對(duì)網(wǎng)頁(yè)的某部分進(jìn)行更新琼掠。
傳統(tǒng)的網(wǎng)頁(yè)(不使用 AJAX)如果需要更新內(nèi)容拒垃,必需重載整個(gè)網(wǎng)頁(yè)面。
有很多使用 AJAX 的應(yīng)用程序案例:新浪微博瓷蛙、Google 地圖悼瓮、開心網(wǎng)等等。
Plain text大家都知道艰猬,普通的文本文件横堡,無(wú)結(jié)構(gòu)的,只能被機(jī)器當(dāng)成相同的每一行冠桃,一行一行讀取命贴。但在各種html, xml, json格式里都十分常見。
Extraction
XPath query language食听,從標(biāo)記語(yǔ)言中提取特定信息的一門語(yǔ)言胸蛛,實(shí)現(xiàn)對(duì)數(shù)據(jù)的初步過濾,只留下我們想要的信息樱报。
JSON documents一般存儲(chǔ)更小胚泌,更容易被parse。不需要特定的query language肃弟,只需R的函數(shù)即可玷室。
Selenium:可以通過R的命令行實(shí)現(xiàn)對(duì)瀏覽器窗口的操作,比如鼠標(biāo)點(diǎn)擊笤受,鍵盤輸入等
正則表達(dá)式穷缤,在XPath不太好用時(shí),可以用于尋找一些離散的箩兽,隱藏的信息
Text mining:對(duì)text進(jìn)行分類津肛,包括明顯的和隱藏的語(yǔ)義,前者就是直接可見的信息汗贫,后者是讀者可以根據(jù)文檔內(nèi)容劃分成不同的主題身坐,比如政治,經(jīng)濟(jì)等落包,類似主題模型部蛇,不帶明顯的label。
Storage
談數(shù)據(jù)庫(kù)的重要性:
一方面是高效的數(shù)據(jù)管理咐蝇,和數(shù)據(jù)結(jié)構(gòu)組織
一方面是如果你需要對(duì)大量的涯鲁,分散的數(shù)據(jù)進(jìn)行重復(fù)操作和處理,搭建數(shù)據(jù)庫(kù)也是節(jié)約時(shí)間更快速的方法。
可以參考SQL
第二章介紹HTML