日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

r语言解析html,R语言爬虫入门-rvest教程

發布時間:2023/12/15 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 r语言解析html,R语言爬虫入门-rvest教程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

安裝包

# install.packages("rvest")

查看rvest包的詳細信息

library(help = rvest)

包的用法:

read_html() 讀取html文檔的函數,其輸入可以是線上的url,也可以是本地的html文件,甚至是包含html的字符串也可以。

html_nodes() 選擇提取文檔中制定元素的部分。可以使用css selectors,例如html_nodes(doc, "table td");也可以使用xpath selectors,例如html_nodes(doc, xpath = "//table//td")。

html_tag() 提取標簽名稱;html_text() 提取標簽內的文本;html_attr() 提取指定屬性的內容;html_attrs() 提取所有的屬性名稱及其內容;

html_table() 解析網頁數據表的數據到R的數據框中。

html_form(),set_values()和submit_form() 分別表示提取、修改和提交表單。

在中文網頁中我們經常會遇到亂碼的問題,這里提供了兩個函數來解決:guess_encoding()用來探測文檔的編碼,方便我們在讀入html文檔時設置正確的編碼格式,repair_encoding()用來修復html文檔讀入后的亂碼問題。

還有一些函數,用來模擬網上的瀏覽行為,如html_session(),jump_to(),follow_link(),back(),forward(),submit_form()等等。

library(rvest)

web

position % html_nodes("p.pl") %>% html_text()

web

position

第一行是加載Rvest包。

第二行是用read_html函數讀取網頁信息(類似Rcurl里的getURL),在這個函數里只需寫清楚網址和編碼(一般就是UTF-8)即可。

第三行是獲取節點信息。用%>%符號進行層級劃分。web就是之前存儲網頁信息的變量,所以我們從這里開始,然后html_nodes()函數獲取網頁里的相應節點。在下面代碼里我簡單的重現了原網頁里的一個層級結構。可以看到,實際上我們要爬取的信息在25個class屬性為pl的

標簽里的文本。

[清] 曹雪芹 著 / 人民文學出版社 / 1996-12 / 59.70元

而對于這樣的結構,在htmlnodes()函數里的寫法就是簡單的 "p.pl",其中“.”表示class屬性的值,如果是id屬性則用“#”,如果大家學過CSS選擇器就很好理解了,是完全一致的。

最后我們用html_text()函數表示獲取文本信息,否則返回的是整個

標簽。總體上用以下一行代碼就可以實現:

Example 2

到天氣網(http://lishi.tianqi.com/)抓取特定頁面的數據, 首先需要在瀏覽器中調試js代碼,chrome中按F12即可查看。通過搜索關鍵字:日期,最高氣溫 ...任何一個都行,得到以下信息。可以發現我們所需要的數據都在

盒子中,而每一行數據又都在ul中。所以,我們可以通過這兩個特征來提取數據。

獲取

以及ul中內容的R代碼如下:

library(rvest)

library(plyr)

city

date

baseUrl

Url

content %

read_html(encoding='GBK') %>%

html_nodes('div.tqtongji2') %>%

html_nodes("ul") %>%

html_text()

head(content)

發現數據之間用rntt之類的隔開。而'rntt'這些里面有:回車符,換行符和制表符。他們的共同點就是全都是空格。所以我們可以通過空格來進行分列,提取相應的數據。

content % strsplit("\\s{4,}")

content

為了美觀和方便操作,我們把它轉換為數據框的形式:

content

names(content)

content

Example 3 R 爬蟲之 rvest 包 :穿越表單 + 圖片下載器

什么是會話?會話的出現是為了跟蹤 cookie,保證 cookie 長期有效,只有當會話被關閉時,cookie 便會失效。你可以把會話(Session)想象成在瀏覽器中打開的頁面窗口,你之所以可以在這個窗口執行很多操作,這是因為服務器端知道你的 cookie 中存在有效的 SessionID,所以服務器會一直通過你的請求,把資源給你。

為什么要創建會話?后面我們將實現表單穿越時,需要保證是在會話窗口執行。

怎么創建會話?使用 html_session( ) 函數。

u

session

什么是表單?HTML 中的表單被用來搜集用戶的不同類型的輸入。例如,登錄表單、搜索框表單等。HTML 表單

包含表單元素,表單元素是指不同類型的 input 元素、復選框(box)、單選(radio)、提交按鈕(submit)等。

怎么穿越表單?分為以下幾步:

提取出你所需要的表單:html_form( )

填寫你的表單:set_values(form, name1=value1, name2=value2)

提交表單,發送給服務器:submit_form(session, form)

forms % html_form()

forms

form

form

在上面的結果中,只有 'search_text' :的冒號后為空,這表明 'search_text' 還沒有填充任何值,而我們的填充任務就是把它填上。比如說我要搜索“美人魚”,那么我就在set_values( ) 中指定一個 search_text 參數,令它的值為“美人魚”。

那么,現在我們的表單已經填充好了,只需要把它提交給服務器了。

filled_form

session2

session$url # 查看初始 session 的 url

session2$url # 查看提交表單后,返回的新會話 session2 的 url

iconv(URLdecode(session2$url), "UTF8")

顯然,在提交表單后,我們訪問的鏈接發生了變化。

PS:session2$url 之所以會有一堆 %A %B 之類的符號,是因為我們搜索的文本是中文,所以提交請求時,鏈接中的中文被再次編碼。執行下面語句,便可以將鏈接變成我們能看懂的形式:

總結

以上是生活随笔為你收集整理的r语言解析html,R语言爬虫入门-rvest教程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。