爬蟲一定要確認是合法的蚓哩!合法的弧关!合法的!(重要的事情說三遍)
目前大部分頂級期刊不接受爬蟲爬取的數(shù)據(jù)的論文投稿
用IMDB網(wǎng)站的樂高大電影網(wǎng)頁作為例子:
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)取評分信息
一個好用的工具:Chrome瀏覽器的擴展程序 Selectorgadget
可以通過點擊網(wǎng)頁的任何部分從而獲得這一部分的html標簽
演員表:
lego_movie %>% html_node ('#titleCast') %>% html_text ()
票房:
lego_movie %>%
html_node('#titleDetails .txt-block:nth-child(12)') %>%
html_text()
為了批量抓取數(shù)據(jù)泵三,可以寫一個循環(huán):比如擱五秒重新訪問一次網(wǎng)頁口猜,把最新的評論抓取下來
讓R休息五秒:
Sys.sleep (5) #隔五秒重新訪問一次網(wǎng)頁
爬蟲抓取下來的數(shù)據(jù)往往比較臟,需要對原始文本做一些處理:正則表達式
可以使用API
API:Application Programming Interface 應(yīng)用程序接口逃沿,互聯(lián)網(wǎng)公司分項數(shù)據(jù)的通道
Twitter為r提供的API程序包:rtweet/twitter
在推特developer里面注冊賬號婴渡,然后獲得賬號密碼,從而進行操作
正則表達式非常適合清洗整理從網(wǎng)頁上爬下來的數(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(換行)以外全部
^ : 定位到文本開頭
$ : 定位到文本結(jié)尾
+:至少一次边臼,例如\w+
當數(shù)據(jù)不規(guī)則的時候 常用函數(shù):
檢查是否存在字符串:
str_detect (data, 'TSLA') #檢查文本里是否有引號包含的字符串
提取字符串:
str_extract (data, "^\\d\\d")
正則表達式Cheatsheet
https://rstudio.com/wp-content/uploads/2016/09/RegExCheatsheet.pdf