爬蟲(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