R語(yǔ)言學(xué)習(xí)筆記:網(wǎng)頁(yè)爬蟲(chóng)

爬蟲(chóng)一定要確認(rèn)是合法的!合法的!合法的?。ㄖ匾氖虑檎f(shuō)三遍)
目前大部分頂級(jí)期刊不接受爬蟲(chóng)爬取的數(shù)據(jù)的論文投稿
用IMDB網(wǎng)站的樂(lè)高大電影網(wǎng)頁(yè)作為例子:
https://www.imdb.com/title/tt1490017/

安裝并調(diào)用rvest程序包

lego_movie = html ('https://www.imdb.com/title/tt1490017/') #輸入網(wǎng)址
lego_movie %>% html_node ('strong span') %>% html_text() %>% as.numeric #調(diào)取評(píng)分信息

一個(gè)好用的工具:Chrome瀏覽器的擴(kuò)展程序 Selectorgadget
可以通過(guò)點(diǎn)擊網(wǎng)頁(yè)的任何部分從而獲得這一部分的html標(biāo)簽

演員表:

lego_movie %>% html_node ('#titleCast') %>% html_text ()

票房:

lego_movie %>%
  html_node('#titleDetails .txt-block:nth-child(12)') %>%
  html_text()

為了批量抓取數(shù)據(jù),可以寫一個(gè)循環(huán):比如擱五秒重新訪問(wèn)一次網(wǎng)頁(yè),把最新的評(píng)論抓取下來(lái)

讓R休息五秒:

Sys.sleep (5) #隔五秒重新訪問(wèn)一次網(wǎng)頁(yè)

爬蟲(chóng)抓取下來(lái)的數(shù)據(jù)往往比較臟,需要對(duì)原始文本做一些處理:正則表達(dá)式

可以使用API
API:Application Programming Interface 應(yīng)用程序接口,互聯(lián)網(wǎng)公司分項(xiàng)數(shù)據(jù)的通道

Twitter為r提供的API程序包:rtweet/twitter
在推特developer里面注冊(cè)賬號(hào),然后獲得賬號(hào)密碼,從而進(jìn)行操作

正則表達(dá)式非常適合清洗整理從網(wǎng)頁(yè)上爬下來(lái)的數(shù)據(jù),或者其他原始文本數(shù)據(jù)
例:data = '16 Oct 150.00 (TSLA1607J150)'
提取'16 Oct': '^\d\d\s\w\w\w'或者'\d+\s\w+'
提取TSLA:'\w\w\w\w'或者 '\([[:alpha:]]+)'

\d : 數(shù)碼【0-9】
[[:alpha]] :字母【A-z】
\w : 數(shù)碼和字母
\s : 空格
. : 除了\n(換行)以外全部
^ : 定位到文本開(kāi)頭
$ : 定位到文本結(jié)尾
+:至少一次,例如\w+

當(dāng)數(shù)據(jù)不規(guī)則的時(shí)候 常用函數(shù):
檢查是否存在字符串:

str_detect (data, 'TSLA') #檢查文本里是否有引號(hào)包含的字符串

提取字符串:

str_extract (data, "^\\d\\d")

正則表達(dá)式Cheatsheet
https://rstudio.com/wp-content/uploads/2016/09/RegExCheatsheet.pdf

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容