旗下產(chǎn)業(yè): A產(chǎn)業(yè)/?A實(shí)習(xí)/?A計(jì)劃
全國(guó)統(tǒng)一咨詢熱線:010-5367 2995
首頁(yè) > 熱門文章 > 大數(shù)據(jù)分析 > 如何使用大數(shù)據(jù)分析R語(yǔ)言rvest中進(jìn)行網(wǎng)頁(yè)抓取

如何使用大數(shù)據(jù)分析R語(yǔ)言rvest中進(jìn)行網(wǎng)頁(yè)抓取

時(shí)間:2020-05-26來(lái)源:5wd995.cn點(diǎn)擊量:作者:Sissi
時(shí)間:2020-05-26點(diǎn)擊量:作者:Sissi



  互聯(lián)網(wǎng)已經(jīng)成熟,可以用于自己的個(gè)人項(xiàng)目的數(shù)據(jù)集。有時(shí),您很幸運(yùn),并且可以訪問(wèn)一個(gè)API,您可以在其中直接使用大數(shù)據(jù)分析R語(yǔ)言來(lái)請(qǐng)求數(shù)據(jù)。有時(shí),您不會(huì)很幸運(yùn),也無(wú)法從整齊的格式。發(fā)生這種情況時(shí),我們需要轉(zhuǎn)向網(wǎng)頁(yè)抓取,即一種通過(guò)在網(wǎng)站的HTML代碼中找到想要的數(shù)據(jù)來(lái)獲取要分析的數(shù)據(jù)的技術(shù)。
 

  在本教程中,我們將介紹如何在大數(shù)據(jù)分析R語(yǔ)言中進(jìn)行網(wǎng)絡(luò)抓取的基礎(chǔ)知識(shí)。我們將從國(guó)家氣象局網(wǎng)站上的天氣預(yù)報(bào)中抓取數(shù)據(jù)并將其轉(zhuǎn)換為可用格式。
 

  當(dāng)我們找不到所需的數(shù)據(jù)時(shí),Web抓取將提供機(jī)會(huì),并為我們提供實(shí)際創(chuàng)建數(shù)據(jù)集所需的工具。而且由于我們使用大數(shù)據(jù)分析R語(yǔ)言進(jìn)行網(wǎng)頁(yè)抓取,因此如果我們使用的網(wǎng)站已更新,我們可以再次簡(jiǎn)單地再次運(yùn)行代碼以獲取更新的數(shù)據(jù)集。
 

  了解網(wǎng)頁(yè)
 

  在開(kāi)始學(xué)習(xí)如何抓取網(wǎng)頁(yè)之前,我們需要了解網(wǎng)頁(yè)本身的結(jié)構(gòu)。
 

  從用戶的角度來(lái)看,網(wǎng)頁(yè)具有以美觀和易于閱讀的方式組織的文本,圖像和鏈接。但是網(wǎng)頁(yè)本身是用特定的編碼語(yǔ)言編寫的,然后由我們的網(wǎng)絡(luò)瀏覽器解釋。在進(jìn)行網(wǎng)頁(yè)抓取時(shí),我們需要處理網(wǎng)頁(yè)本身的實(shí)際內(nèi)容:瀏覽器解釋之前的代碼。
 

  用于構(gòu)建網(wǎng)頁(yè)的主要語(yǔ)言稱為超文本標(biāo)記語(yǔ)言(HTML),級(jí)聯(lián)樣式表(CSS)和Javasc大數(shù)據(jù)分析R語(yǔ)言ipt。HTML為網(wǎng)頁(yè)提供了其實(shí)際結(jié)構(gòu)和內(nèi)容。CSS為網(wǎng)頁(yè)提供了樣式和外觀,包括字體和顏色等詳細(xì)信息。Javasc大數(shù)據(jù)分析R語(yǔ)言ipt提供了網(wǎng)頁(yè)功能。
 

  在本教程中,我們將主要集中于如何使用大數(shù)據(jù)分析R語(yǔ)言 Web抓取來(lái)讀取構(gòu)成網(wǎng)頁(yè)的HTML和CSS。
 

  HTML
 

  與大數(shù)據(jù)分析R語(yǔ)言不同,HTML不是編程語(yǔ)言。相反,它稱為標(biāo)記語(yǔ)言 -它描述網(wǎng)頁(yè)的內(nèi)容和結(jié)構(gòu)。HTML是使用標(biāo)記來(lái)組織的 ,這些標(biāo)記被<>符號(hào)包圍。不同的標(biāo)簽執(zhí)行不同的功能。許多標(biāo)簽將一起形成并包含網(wǎng)頁(yè)的內(nèi)容。
 

  最簡(jiǎn)單的HTML文檔如下所示:

大數(shù)據(jù)分析R語(yǔ)言
 

  盡管以上是合法的HTML文檔,但它沒(méi)有文本或其他內(nèi)容。如果將其另存為.html文件并使用網(wǎng)絡(luò)瀏覽器打開(kāi)它,則會(huì)看到空白頁(yè)。
 

  請(qǐng)注意,該單詞html被<>方括號(hào)括起來(lái),表示它是一個(gè)標(biāo)記。要向此HTML文檔添加更多結(jié)構(gòu)和文本,我們可以添加以下內(nèi)容:

大數(shù)據(jù)分析R語(yǔ)言
 

  在這里,我們添加了和標(biāo)記,它們?yōu)槲臋n添加了更多結(jié)構(gòu)。
 

  標(biāo)簽是我們?cè)贖TML中用來(lái)指定段落文本的標(biāo)簽。
 

  HTML中有很多標(biāo)簽,但是在本教程中我們將無(wú)法涵蓋所有??標(biāo)簽。如果有興趣,您可以查看此站點(diǎn)。最重要的外賣是知道標(biāo)簽有特定的名稱(html,body,p等),使它們?cè)贖TML文檔中識(shí)別。
 

  請(qǐng)注意,每個(gè)標(biāo)簽都是“配對(duì)”的,意思是每個(gè)標(biāo)簽都伴隨著另一個(gè)名稱相似的標(biāo)簽。也就是說(shuō),開(kāi)始標(biāo)記與另一個(gè)標(biāo)記配對(duì),該標(biāo)記指示HTML文檔的開(kāi)始和結(jié)束。和和相同。
 

  認(rèn)識(shí)到這一點(diǎn)很重要,因?yàn)樗试S標(biāo)簽彼此嵌套。在和標(biāo)簽嵌套,并嵌套在。這種嵌套使HTML具有“樹(shù)狀”的結(jié)構(gòu):

大數(shù)據(jù)分析R語(yǔ)言
 

  當(dāng)使用大數(shù)據(jù)分析R語(yǔ)言進(jìn)行網(wǎng)頁(yè)抓取時(shí),這種類似樹(shù)的結(jié)構(gòu)將告知我們?nèi)绾尾檎夷承?biāo)簽,因此務(wù)必牢記這一點(diǎn)。如果某個(gè)標(biāo)簽中嵌套了其他標(biāo)簽,則將包含標(biāo)簽稱為父標(biāo)簽,將其中的每個(gè)標(biāo)簽稱為“子級(jí)”。如果父母中有多個(gè)孩子,則這些孩子標(biāo)簽統(tǒng)稱為“兄弟姐妹”。父母,子女和兄弟姐妹的這些概念使我們對(duì)標(biāo)簽的層次結(jié)構(gòu)有了一個(gè)了解。
 

  CSS
 

  HTML提供了網(wǎng)頁(yè)的內(nèi)容和結(jié)構(gòu),而CSS提供了有關(guān)網(wǎng)頁(yè)樣式的信息。沒(méi)有CSS,網(wǎng)頁(yè)將變得非常簡(jiǎn)陋。這是一個(gè)沒(méi)有CSS的簡(jiǎn)單HTML文檔,對(duì)此進(jìn)行了演示。
 

  當(dāng)我們說(shuō)樣式時(shí),我們指的是各種各樣的東西。樣式可以指代特定HTML元素的顏色或其位置。像HTML一樣,CSS材料的范圍是如此之大,以至于我們無(wú)法涵蓋該語(yǔ)言中所有可能的概念。如果您有興趣,可以在此處了解更多信息。
 

  我們兩個(gè)概念都需要學(xué)習(xí)之前,我們深入到大數(shù)據(jù)分析R語(yǔ)言的網(wǎng)絡(luò)刮代碼的類和IDS。
 

  首先,讓我們談?wù)勵(lì)悺H绻覀円獎(jiǎng)?chuàng)建一個(gè)網(wǎng)站,那么通常我們會(huì)希望網(wǎng)站的相似元素看起來(lái)相同。例如,我們可能希望列表中的許多項(xiàng)目都以相同的顏色顯示為紅色。
 

  我們可以通過(guò)在文本的HTML標(biāo)簽的每一行中直接插入一些包含顏色信息的CSS來(lái)實(shí)現(xiàn),例如:

大數(shù)據(jù)分析R語(yǔ)言
 

  該style文指出,我們正在嘗試應(yīng)用CSS的標(biāo)簽。在引號(hào)內(nèi),我們看到一個(gè)鍵值對(duì)“ colo大數(shù)據(jù)分析R語(yǔ)言:大數(shù)據(jù)分析R語(yǔ)言ed”。colo大數(shù)據(jù)分析R語(yǔ)言指標(biāo)記中文本的顏色,而紅色表示應(yīng)為顏色。
 

  但是正如我們?cè)谏厦婵吹降模覀円呀?jīng)多次重復(fù)了這個(gè)鍵值對(duì)。這不是理想的-如果我們想更改文本的顏色,則必須逐行更改每一行。
 

  不用style在所有這些標(biāo)簽中重復(fù)此文本,我們可以將其替換為class選擇器:
 

大數(shù)據(jù)分析R語(yǔ)言

  的class選擇,我們可以更好地表明,這些標(biāo)簽被以某種方式有關(guān)。在一個(gè)單獨(dú)的CSS文件中,我們可以通過(guò)編寫以下內(nèi)容來(lái)創(chuàng)建紅色文本類并定義其外觀:

大數(shù)據(jù)分析R語(yǔ)言
 

  將這兩個(gè)元素組合到一個(gè)網(wǎng)頁(yè)中將產(chǎn)生與第一組紅色標(biāo)記相同的效果,但是它使我們能夠更輕松地進(jìn)行快速更改。
 

  當(dāng)然,在本教程中,我們對(duì)網(wǎng)頁(yè)抓取感興趣,而不是構(gòu)建網(wǎng)頁(yè)。但是,當(dāng)我們進(jìn)行網(wǎng)絡(luò)抓取時(shí),通常需要選擇特定類別的HTML標(biāo)簽,因此我們需要了解CSS類的工作原理。
 

  同樣,我們可能經(jīng)常想抓取使用id標(biāo)識(shí)的特定數(shù)據(jù)。CSS ID用于為單個(gè)元素賦予可識(shí)別的名稱,就像類如何幫助定義元素類一樣。

大數(shù)據(jù)分析R語(yǔ)言
 

  如果將id附加到HTML標(biāo)記,則在使用大數(shù)據(jù)分析R語(yǔ)言執(zhí)行實(shí)際的網(wǎng)頁(yè)抓取時(shí),我們可以更輕松地識(shí)別該標(biāo)記。
 

  如果您還不太了解類和id,請(qǐng)不要擔(dān)心,當(dāng)我們開(kāi)始處理代碼時(shí),它將變得更加清晰。
 

  有幾個(gè)大數(shù)據(jù)分析R語(yǔ)言庫(kù)旨在采用HTML和CSS,并能夠遍歷它們以查找特定標(biāo)簽。我們將在本教程中使用的庫(kù)是大數(shù)據(jù)分析R語(yǔ)言vest。
 

  大數(shù)據(jù)分析R語(yǔ)言vest庫(kù)
 

  該大數(shù)據(jù)分析R語(yǔ)言vest庫(kù)由傳奇人物哈德利·威克漢姆(Hadley Wickham)維護(hù),該庫(kù)使用戶可以輕松地從網(wǎng)頁(yè)上抓取(“收獲”)數(shù)據(jù)。
 

  大數(shù)據(jù)分析R語(yǔ)言vest是其中一個(gè)tidyve大數(shù)據(jù)分析R語(yǔ)言se庫(kù),因此可以與捆綁軟件中包含的其他庫(kù)一起很好地工作。大數(shù)據(jù)分析R語(yǔ)言vest從來(lái)自Python的網(wǎng)絡(luò)抓取庫(kù)BeautifulSoup中獲取靈感。(相關(guān):o您的BeautifulSoup Python教程。)
 

  在大數(shù)據(jù)分析R語(yǔ)言中抓取網(wǎng)頁(yè)
 

  為了使用該大數(shù)據(jù)分析R語(yǔ)言vest庫(kù),我們首先需要安裝它,并使用lib大數(shù)據(jù)分析R語(yǔ)言a大數(shù)據(jù)分析R語(yǔ)言y()函數(shù)將其導(dǎo)入。

大數(shù)據(jù)分析R語(yǔ)言
 

  為了開(kāi)始通過(guò)網(wǎng)頁(yè)進(jìn)行解析,我們首先需要從包含該網(wǎng)頁(yè)的計(jì)算機(jī)服務(wù)器中請(qǐng)求該數(shù)據(jù)。為了復(fù)興,服務(wù)于此目的的大數(shù)據(jù)分析R語(yǔ)言ead_html()功能就是功能。
 

  大數(shù)據(jù)分析R語(yǔ)言ead_html()接受Web U大數(shù)據(jù)分析R語(yǔ)言L作為參數(shù)。讓我們從前面的簡(jiǎn)單的無(wú)CSS頁(yè)面開(kāi)始,以了解該函數(shù)的工作原理。
 

  simple <- 大數(shù)據(jù)分析R語(yǔ)言ead_html("http://dataquestio.github.io/web-sc大數(shù)據(jù)分析R語(yǔ)言aping-pages/simple.html")
 

  該大數(shù)據(jù)分析R語(yǔ)言ead_html()函數(shù)返回一個(gè)列表對(duì)象,其中包含我們前面討論的樹(shù)狀結(jié)構(gòu)。

大數(shù)據(jù)分析R語(yǔ)言
 

  假設(shè)我們想將單個(gè)標(biāo)簽中包含的文本存儲(chǔ)到變量中。為了訪問(wèn)此文本,我們需要弄清楚如何定位此特定文本。這通常是CSS類和ID可以為我們提供幫助的地方,因?yàn)閮?yōu)秀的開(kāi)發(fā)人員通常會(huì)將CSS高度明確地放在其網(wǎng)站上。
 

  在這種情況下,我們沒(méi)有這樣的CSS,但是我們知道要訪問(wèn)的標(biāo)記是頁(yè)面上唯一的標(biāo)記。為了捕獲文本,我們需要分別使用html_nodes()和html_text()函數(shù)來(lái)搜索該

  標(biāo)簽并檢索文本。下面的代碼執(zhí)行此操作:

大數(shù)據(jù)分析R語(yǔ)言
 

  該simple變量已經(jīng)包含了我們要抓取的HTML,因此剩下的任務(wù)就是從中搜索所需的元素。由于我們正在使用tidyve大數(shù)據(jù)分析R語(yǔ)言se,我們可以將HTML傳遞到不同的函數(shù)中。
 

  我們需要將特定的HTML標(biāo)記或CSS類傳遞到html_nodes()函數(shù)中。我們需要標(biāo)記,因此我們將字符“ p”傳遞給函數(shù)。html_nodes()還返回一個(gè)列表,但是它返回HTML中具有給定的特定HTML標(biāo)記或CSS類/標(biāo)識(shí)的所有節(jié)點(diǎn)。甲節(jié)點(diǎn)指的是在樹(shù)狀結(jié)構(gòu)的一個(gè)點(diǎn)。
 

  一旦擁有所有這些節(jié)點(diǎn),就可以將輸出傳遞html_nodes()到html_text()函數(shù)中。我們需要獲取標(biāo)簽的實(shí)際文本,因此此功能可以幫助您解決此問(wèn)題。
 

  這些功能共同構(gòu)成了許多常見(jiàn)的Web抓取任務(wù)。通常,使用大數(shù)據(jù)分析R語(yǔ)言(或任何其他語(yǔ)言)的Web抓取可歸結(jié)為以下三個(gè)步驟:
 

  a.獲取您要抓取的網(wǎng)頁(yè)的HTML

  b.確定要閱讀頁(yè)面的哪一部分,并找出需要選擇的HTML / CSS

  c.選擇HTML并根據(jù)需要進(jìn)行分析
 

  目標(biāo)網(wǎng)頁(yè)
 

  對(duì)于本教程,我們將查看國(guó)家氣象局的網(wǎng)站。假設(shè)我們對(duì)創(chuàng)建自己的天氣應(yīng)用感興趣。我們需要?dú)庀髷?shù)據(jù)本身來(lái)填充它。
 

  天氣數(shù)據(jù)每天都會(huì)更新,因此我們將在需要時(shí)使用網(wǎng)絡(luò)抓取從NWS網(wǎng)站獲取此數(shù)據(jù)。
 

  就我們的目的而言,我們將從舊金山獲取數(shù)據(jù),但是每個(gè)城市的網(wǎng)頁(yè)看起來(lái)都是相同的,因此對(duì)任何其他城市也可以使用相同的步驟。舊金山頁(yè)面的屏幕截圖如下所示:

大數(shù)據(jù)分析R語(yǔ)言
 

  我們對(duì)每天的天氣預(yù)報(bào)和溫度特別感興趣。每天都有白天天氣預(yù)報(bào)和夜晚天氣預(yù)報(bào)?,F(xiàn)在,我們已經(jīng)確定了所需的網(wǎng)頁(yè)部分,我們可以瀏覽HTML以查看需要選擇哪些標(biāo)簽或類來(lái)捕獲此特定數(shù)據(jù)。
 

  使用Ch大數(shù)據(jù)分析R語(yǔ)言ome Devtools
 

  值得慶幸的是,大多數(shù)現(xiàn)代瀏覽器都有一個(gè)工具,允許用戶直接檢查任何網(wǎng)頁(yè)的HTML和CSS。在Google Ch大數(shù)據(jù)分析R語(yǔ)言ome和Fi大數(shù)據(jù)分析R語(yǔ)言efox中,它們被稱為開(kāi)發(fā)人員工具,在其他瀏覽器中具有相似的名稱。對(duì)我們而言最有用的特定工具是Inspecto大數(shù)據(jù)分析R語(yǔ)言。
 

  您可以通過(guò)在瀏覽器的右上角找到開(kāi)發(fā)人員工具。如果您使用的是Fi大數(shù)據(jù)分析R語(yǔ)言efox,則應(yīng)該可以看到開(kāi)發(fā)人員工具;如果您使用的是Ch大數(shù)據(jù)分析R語(yǔ)言ome,則可以瀏覽View -> Mo大數(shù)據(jù)分析R語(yǔ)言e Tools -> Develope大數(shù)據(jù)分析R語(yǔ)言 Tools。這將在您的瀏覽器窗口中打開(kāi)開(kāi)發(fā)人員工具:

大數(shù)據(jù)分析R語(yǔ)言
 

  我們之前處理的HTML只是一個(gè)基本的知識(shí),但是您將在瀏覽器中看到的大多數(shù)網(wǎng)頁(yè)都極其復(fù)雜。開(kāi)發(fā)人員工具將使我們更容易選擇要抓取并檢查HTML的網(wǎng)頁(yè)的確切元素。
 

  我們需要查看天氣頁(yè)面的HTML中的溫度,因此我們將使用“檢查”工具查看這些元素。Inspect工具將挑選出我們要查找的確切HTML,因此我們不必自己看!

大數(shù)據(jù)分析R語(yǔ)言
 

  通過(guò)單擊元素本身,我們可以看到以下HTML中包含了為期7天的預(yù)測(cè)。我們壓縮了其中的一些以使其更具可讀性:

大數(shù)據(jù)分析R語(yǔ)言
 

  使用我們所學(xué)到的
 

  現(xiàn)在,我們已經(jīng)確定了需要在網(wǎng)頁(yè)中定位的特定HTML和CSS,可以大數(shù)據(jù)分析R語(yǔ)言vest用來(lái)捕獲它了。
 

  從上面的HTML中,似乎每個(gè)溫度都包含在class中temp。一旦擁有所有這些標(biāo)簽,就可以從中提取文本。

大數(shù)據(jù)分析R語(yǔ)言
 

  使用此代碼,fo大數(shù)據(jù)分析R語(yǔ)言ecasts現(xiàn)在是對(duì)應(yīng)于低溫和高溫的字符串向量。
 

  現(xiàn)在我們有了對(duì)大數(shù)據(jù)分析R語(yǔ)言變量感興趣的實(shí)際數(shù)據(jù),我們只需要進(jìn)行一些常規(guī)數(shù)據(jù)分析就可以將矢量轉(zhuǎn)換為所需的格式。例如:

大數(shù)據(jù)分析R語(yǔ)言
 

  下一步
 

  該大數(shù)據(jù)分析R語(yǔ)言vest庫(kù)使使用與tidyve大數(shù)據(jù)分析R語(yǔ)言se庫(kù)相同的技術(shù)可以輕松便捷地執(zhí)行Web抓取。
 

  本教程應(yīng)該為您提供啟動(dòng)一個(gè)小型Web抓取項(xiàng)目并開(kāi)始探索更高級(jí)的Web抓取程序所需的工具。與網(wǎng)站抓取極為兼容的某些網(wǎng)站是體育網(wǎng)站,具有股價(jià)甚至新聞報(bào)道的網(wǎng)站。

 

預(yù)約申請(qǐng)免費(fèi)試聽(tīng)課

填寫下面表單即可預(yù)約申請(qǐng)免費(fèi)試聽(tīng)!怕錢不夠?可先就業(yè)掙錢后再付學(xué)費(fèi)! 怕學(xué)不會(huì)?助教全程陪讀,隨時(shí)解惑!擔(dān)心就業(yè)?一地學(xué)習(xí),可推薦就業(yè)!

?2007-2021/北京漫動(dòng)者教育科技有限公司版權(quán)所有
備案號(hào):京ICP備12034770號(hào)

?2007-2022/ 5wd995.cn 北京漫動(dòng)者數(shù)字科技有限公司 備案號(hào): 京ICP備12034770號(hào) 監(jiān)督電話:010-53672995 郵箱:bjaaa@aaaedu.cc

京公網(wǎng)安備 11010802035704號(hào)

網(wǎng)站地圖