2016年12月30日 星期五

R學習筆記 - 資料工程篇(二) XML

#註: 本篇筆記諸多內容直接紀錄課程原文,而本文也僅整理資訊之用途
課程連結 : R語言翻轉教室

RDataEngineer-02-XML
XML的全名是:eXtensible Markup Language,是一種讓電腦可以快速理解資訊的標記語言。XML的透過標記來讓電腦理解資訊的內容,並且把標籤與內容清楚的切割開。

XML的文件中,標籤是可以有結構關係的。在慣例中,我們會說tr是th的父標籤(parent),而th與td兩者都是tr的子標籤(children)| 每個標籤最多只有一個父標籤。這是因為th和td兩個標籤,寫在<tr>和</tr>之間。


在HTML網頁中,幾乎所有的標籤都有父標籤,除了html這個標籤以外。所以我們在處理HTML文件時,會稱呼這個標籤為整個文件的根(root)。


更多瞭解可以輸入wiki_html()wiki_xml()了解更仔細的背景知識。


主要使用R套件 : xml2 

xml2套件要處理XML或HTML文件之前,必須要先作解析,將文件建立成一種特殊的R 物件後,才能讓我們挖掘資訊。

#挖掘網頁資訊的三步驟:
1. 找到標籤 2. 查詢屬性 3.檢查內容

1.read_xml   :  讀取xml檔,
`read_xml`函數有`x`、`encoding`和其他參數可以使用。 `x`則可以是一個檔案路徑(filepath)、一個網址(url),或是一個XML文本的字串向量(literal xml)。

目前xml2中的物件,大致上可以分成三種:xml_document、xml_node和xml_nodeset。 xml_document就代表整個XML文件。xml_node則對應到上述介紹的XML標籤,在經過`read_xml`後每個標籤會被轉化為一個xml_node。xml_nodeset則是一群標籤的集合。


2.xml_find_all
共有兩個參數:`x`與`xpath`。`x`可以是xml_document、 xml_node或xml_nodeset。而`xpath`(XML Path Language)則是一種特別的格式,讓我們可以和電腦溝通我們要搜尋的標籤。

#範例:xml_find_all(doc1, "/a/b")
 =>  a: 父標籤  b:子標籤

若沒有提供父標籤,無法搜尋出欲搜尋之子標籤

3.xml_text( ) 
取出標籤內的內容

4.xml_parent() 
查詢標籤的父標籤

5.xml_contents() :
同樣為取出標籤內容,但當含有子標籤時, 它和`xml_text`的行為會不太一致


6.xml_children(a) :
來取得所有以a 為父標籤的標籤們


7.xml_attrs() :
取得XML標籤的屬性(帶有名字的字串向量
)
在使用XPath尋找標籤時,屬性是可以派上用場的。

#範例
`
xml_find_all(doc1,
"/a/c[@class]")`,意即是搜尋時增加:「標籤必須要帶有 名稱為"class"的屬性」。


甚至還可以指定屬性的值,例如:`xml_find_all(doc1, "/a/c[@class='g']")


一種XPath中常常使用的定位方式 :  "//"


這裡的"//"代表的就是任意位置。

當我們在處理複雜的網頁資料時,如果每次都要從根部尋找正確的路徑,是非常不方便的。此時,透過"//a",我們就可以找到在所有位置都出現的a標籤。# "//"的用法是可以搭配屬性的過濾使用的。

#HW:

1. browseURL() : 輸入URL網址即可使用預設瀏覽器,瀏覽網頁

2. read_html() : 載入網頁內容
3. encoding() : 告訴電腦,應採用哪種編碼讀取該物件
範例:  Encoding(ths_text) <- "UTF-8"

#備註:
最後再次推薦R語言翻轉教室,做作業時遇到瓶頸,可直接在線上討論區直接發問,不至於自己一個人想破頭,卻無法得到解答。

1 則留言:

  1. Lucky Club Casino Site & Mobile Review
    The Lucky Club site is one of the most popular online casino websites. The operator is owned and operated by S.I. luckyclub.live Limited and is owned by  Rating: 8/10 · ‎Review by luckyclub.live

    回覆刪除