爬虫一定要确认是合法的!合法的!合法的!(重要的事情说三遍)
目前大部分顶级期刊不接受爬虫爬取的数据的论文投稿
用IMDB网站的乐高大电影网页作为例子:
https://www.imdb.com/title/tt1490017/
安装并调用rvest程序包
lego_movie = html ('https://www.imdb.com/title/tt1490017/') #输入网址
lego_movie %>% html_node ('strong span') %>% html_text() %>% as.numeric #调取评分信息
一个好用的工具:Chrome浏览器的扩展程序 Selectorgadget
可以通过点击网页的任何部分从而获得这一部分的html标签
演员表:
lego_movie %>% html_node ('#titleCast') %>% html_text ()
票房:
lego_movie %>%
html_node('#titleDetails .txt-block:nth-child(12)') %>%
html_text()
为了批量抓取数据,可以写一个循环:比如搁五秒重新访问一次网页,把最新的评论抓取下来
让R休息五秒:
Sys.sleep (5) #隔五秒重新访问一次网页
爬虫抓取下来的数据往往比较脏,需要对原始文本做一些处理:正则表达式
可以使用API
API:Application Programming Interface 应用程序接口,互联网公司分项数据的通道
Twitter为r提供的API程序包:rtweet/twitter
在推特developer里面注册账号,然后获得账号密码,从而进行操作
正则表达式非常适合清洗整理从网页上爬下来的数据,或者其他原始文本数据
例:data = '16 Oct 150.00 (TSLA1607J150)'
提取'16 Oct': '^\d\d\s\w\w\w'或者'\d+\s\w+'
提取TSLA:'\w\w\w\w'或者 '\([[:alpha:]]+)'
\d : 数码【0-9】
[[:alpha]] :字母【A-z】
\w : 数码和字母
\s : 空格
. : 除了\n(换行)以外全部
^ : 定位到文本开头
$ : 定位到文本结尾
+:至少一次,例如\w+
当数据不规则的时候 常用函数:
检查是否存在字符串:
str_detect (data, 'TSLA') #检查文本里是否有引号包含的字符串
提取字符串:
str_extract (data, "^\\d\\d")
正则表达式Cheatsheet
https://rstudio.com/wp-content/uploads/2016/09/RegExCheatsheet.pdf