原标题:R语言爬虫常用方法总结(以案例说明)

现在大家对爬虫的兴趣不断高涨,R和PYTHON是两个非常有力的爬虫工具。Python倾向于做大型爬虫,与R相比,语法相对复杂,因此Python爬虫的学习曲线会相对陡峭。对于那些时间宝贵,又想从网上获取数据的初学者而言,用R做爬虫是最好的选择,有三个原因:1、R语法相对直观,规则更加灵活;2、对于数据量不大的用户来数(小于百万级),R也能够非常自如地处理;3、先学习R爬虫,等熟悉爬虫的原理之后,在过渡到Python是很容易的。

这篇博文你会学到什么:

使用XML抓取表格数据(爬取勇士队球员数据)

使用rvest抓取网页数据(爬取关于特朗普的百度新闻)

使用jsonlite抓取json格式数据(爬取高德地图温州各个行政区域的中心)

使用RSelenium模拟登录抓取数据(模拟登录人大经济论坛爬取R语言板块数据)

使用PhantomJS不登陆抓取数据(抓取国家数据各省的近13个月CPI)

另外你也会学到一些数据处理的小技巧表格数据抓取

表格数据是最容易抓取的数据格式,直接使用XML包中的readHTMLTable函数,一页中的多个表格会使用列表的形式存储,在使用readHTNLTable的时候,header=T可以标记出所抓取的表格是列名,大多说情况抓过来表格的列名是乱码的,你可以使用rvest::repair_encoding对它们进行修复。爬取勇士队球员数据的代码如下:

#抓取表格数据(抓取勇士队的球员数据)

library(XML)

url <-"http://www.stat-nba.com/team/GSW.html"

dt1 <- readHTMLTable(url,header = T)

names(dt1[[1]]) <- rvest::repair_encoding(names(dt1[[1]]))

head(dt1[[1]])

球员 出场 首发 时间 投篮 命中 出手 三分 命中 出手 罚球 命中 出手 篮板

1凯文-杜兰特121234.753.8%8.916.646.7%2.96.386.9%4.45.17.5

2斯蒂芬-库里131332.446.7%7.516.238.8%3.69.394.4%6.56.84.7

3克莱-汤普森131332.951.4%8.516.547.1%3.77.875.0%0.50.63.8

4德雷蒙德-格林131329.849.5%3.57.035.7%1.23.279.4%2.12.67.9

5大卫-韦斯特12011.368.6%2.94.375.0%0.30.380.0%0.70.82.3

6尼克-杨12013.044.1%2.24.941.7%1.74.060.0%0.30.41.0

前场 后场 助攻 抢断 盖帽 失误 犯规 得分

10.86.84.90.62.43.42.325.2

20.54.26.71.80.22.62.225.2

30.53.42.70.70.81.82.221.1

41.16.86.71.01.33.23.010.2

51.01.31.30.71.41.41.66.8

60.30.80.90.80.10.41.16.3rvest抓取网页数据

rvest是R用户使用率最多的爬虫包,它简洁地语法可以解决大部分的爬虫问题。它的使用方法比较固定1、使用read_html读取网页;2、通过CSS或Xpath获取所需要的节点并使用html_nodres读取节点内容;3、结合stringr包对数据进行清理。下面使用它爬取关于特朗普的百度新闻,具体代码如下:

library(rvest)

library(stringr)

library(rlist)

url <-"http://news.baidu.com/ns?cl=2&rn=20&tn=news&word=%E7%89%B9%E6%9C%97%E6%99%AE&ie=utf-8"

#抓取网页

httr_web <- read_html(url,encoding ="utf-8")

#抓取新闻标题

title <- httr_web%>%html_nodes("h3>a")%>%html_text(trim = T)

#抓取新闻发布者与日期

author <- httr_web%>%html_nodes("p.c-author")%>%html_text(trim = T)

candidate_date=Sys.Date()%>%format("%Y年%m月%d日")

fun <-function(x){

re=if(length(x)==3){

re=c(x[1],candidate_date,x[length(x)])

}else{

re= x[-2]

}

re=data.frame(发布者=re[1],日期=re[2],时间=re[3])

return(re)

}

news_Trump <- data.frame(标题=title ,

author%>%str_split("s")%>%lapply(fun)%>%list.stack())

tail(news_Trump)

标题 发布者 日期 时间

15特朗普访越车队驶过河内歌剧院 引众人围观 网易2017年11月12日6小时前

16特朗普:美俄就政治解决叙利亚问题达成一致协议 环球网2017年11月12日9小时前

17英媒:印度为迎接特朗普女儿 围捕乞丐暂住监狱 腾讯新闻2017年11月12日14小时前

18【独家】他此行的外交礼遇有点不一样 环球网2017年11月12日7小时前

19得分“A+”的不止有特朗普外孙女,更有这支军队 中国军网2017年11月12日6小时前

20多位专家谈中美关系:两国合作前景广阔 中国新闻网2017年11月12日2小时前抓取json格式数据

json数据是一些列数据的嵌套,它的一般格式如下 {key1:var1:{key2:var2,...},...}, 这种格式的数据通常为网站的开放数据,可以申请目标网站的API,然后获取数据。获得API后,rvest可以很容易处理这种数据,但由于数据格式比较复杂,后期数据处理会有些繁琐。因此这里建议大家使用jsonlite中的fromJSON函数,它直接以嵌套列表的格式呈现数据,不建议大家使用RJSON中的fromJSON,它你会的到url多重自字符的错误。获取高德地图中温州各行政区域中心坐标的代码如下,你也可使用这个方法获取个行政区的json边界,方法类似,这里不再说明。

##抓取JSON数据(抓取温州各个行政区域的坐标)

library(jsonlite)

name="温州"

encoding_name <- iconv(enc2utf8(name),from="utf-8",to="ISO-8859-1",sub="byte")%>%

str_replace_all("><","%")%>%str_sub(1,18)%>%str_to_upper()%>%

str_replace("<","%")

subdistrict_num=1

key_str="你的API"

url0 <-"http://restapi.amap.com/v3/config/district?"

url <- paste0(url0,

"keywords=",encoding_name,"&",

"subdistrict=",subdistrict_num,"&",

"key=",key_str)

wz_center<- fromJSON(url)

wz_centers<-wz_center[["districts"]][["districts"]][[1]]

tail(wz_centers)

citycode adcode name center level districts

60577330326平阳县120.565793,27.661918district NULL

70577330327苍南县120.427619,27.519773district NULL

80577330328文成县120.091498,27.786996district NULL

90577330329泰顺县119.717649,27.556884district NULL

100577330381瑞安市120.655148,27.778657district NULL

110577330382乐清市120.983906,28.113725district NULLRSelenium模拟登录抓取数据

使用RSelenium时,你首先要下载Selenium,chromedriver,直接百度,这里不再说明。下载之后要把Selenium放在你当前的工作目录,chromedriver放在chorm的目录下,win10用户Altt+x--cmd---">"前面的即为工作目录,然后你还需要下载java,并把它放在你的环境变量中(注意区分用户环境还是系统环境),最后在命令窗口输入下面代码: java -jar selenium-server-standalone-3.4.0.jar 上面命令运行成功后我们就可已在R中使用RSelenium了,Selenium是一个模拟人点击网页的自动化测试模块,所有输入和点击的操作都可以用它实现。RSelenium的操作如下:

remoteDriver创建远程连接

open()打浏览器

navigate(url)打开网页

findElement、clickElement、sendKeysToElement三剑客进行一些列的选中、点击、输入操作

getElementAttribute("outerHTML")[[1]]转为HTML对象,然后使用rvest操作

library(RSelenium)

remDr <- remoteDriver(remoteServerAddr ="127.0.0.1",

port =4444,

browserName ="chrome")

remDr$open()#打开浏览器

remDr$navigate("http://bbs.pinggu.org/forum-69-1.html")

step1 <- remDr$findElement(using="xpath",

"//*[@id="nv_forum"]/div[6]/div[1]/div/div[4]/ul/li[3]/a")

step1$clickElement()

step21 <- remDr$findElement(using="xpath","//*[@id="username"]")

step21$clickElement()

step21$sendKeysToElement(list(username ="用户名"))

step22 <- remDr$findElement(using="xpath","//*[@id="password"]")

step22$clickElement()

step22$sendKeysToElement(list(password ="密码"))

step23 <- remDr$findElement(using="xpath","/html/body/div[2]/div/div[2]/a")

step23$clickElement()

step3 <- remDr$findElement(using="xpath","//*[@id="moderate"]/table")

web <- step3$getElementAttribute("outerHTML")[[1]]%>%read_html()

dat3=data.frame(

标题=web%>%html_nodes("a.xst")%>%html_text(trim = T),

发布者=web%>%html_nodes("a.u")%>%html_text(trim = T),

发布时间=web%>%html_nodes("p>em>span")%>%html_text(trim = T),

最后回复者=web%>%html_nodes("p>em>a:nth-child(4)")%>%html_text(trim = T),

最后回复日期=web%>%html_nodes("p>em>a:nth-child(5)")%>%html_text(trim = T)

)

tail(dat3)

标题

75R randomForest classification regression

76求教R语言中的MSBVAR包出现的问题

77【经典教材系列】SpatialandSpatio-temporalBayesianModelswithR - INLA

78求助----关于R语言的randomforest包的一个问题

79用R绘制水平方向的条形图并在相应位置添加标签

80如何把散点和曲线花在一张图上

发布者 发布时间 最后回复者 最后回复日期

75fengqifeng2016-6-26鱼铃五校名22017-11-10

76xiaoqiang17892013-6-19涅墨西斯随风2017-11-10

77wwqqer2015-10-19苦丁冰茶2017-11-10

78benbobo2012-5-2鱼铃五校名22017-11-10

79慕目穆木2017-11-9nkunku2017-11-10

80awen10112017-11-2GOD.M.W2017-11-10使用PhantomJS不登陆抓取数据

首先下载phantomjs,然后把下面代码块复制到text,保存后更改后缀名为.js,若需要抓取其他js网页,直接更改open中的内容即可。注意你的到的js文件要和phantomjs.exe放在相同的工作目录下。

// NDC.js

var webPage = require("webpage");

var page = webPage.create();

var fs = require("fs");

var path ="NDC.html"

page.open("http://data.stats.gov.cn/easyquery.htm?cn=E0101", function (status) {

var content = page.content;

fs.write(path,content,"w")

phantom.exit();

});

运行system("./phantomjs NDC.js")后,会在你的工作目录下创建一个NDC.html文档,直接用read_html读就可以,然后获取所需的表格数据。

system("./phantomjs NDC.js")

web <- read_html("NDC.html")

dat4 <- (web%>%html_table())[[1]]

tail(dat4)

地区2017年9月2017年8月2017年7月2017年6月2017年5月2017年4月

26西藏自治区101.7101.5101.4101.2101.2101.3

27陕西省102.2102.7102.1102.0101.8101.1

28甘肃省102.1101.8101.4101.3100.8100.4

29青海省102.3102.3101.6101.6101.099.8

30宁夏回族自治区101.4101.6101.3101.7101.8101.3

31新疆维吾尔自治区102.8101.9101.7102.1102.1101.5

2017年3月2017年2月2017年1月2016年12月2016年11月2016年10月

26102.0102.4102.8103.0102.9102.7

27100.099.7101.5101.2101.5101.5

28100.2100.3101.7101.4101.2101.1

29100.1100.5102.0101.9102.0102.1

30100.7100.3102.6102.5102.3102.4

31101.2101.5102.8102.3102.4101.9

如需转载请联系EasyCharts团队!

微信后台回复“转载”即可!返回搜狐,查看更多

责任编辑:

r语言爬虫和python爬虫哪个好-R语言爬虫常用方法总结(以案例说明)相关推荐

  1. python爬虫百科-Python从概念上先了解爬虫

    什么是爬虫 爬虫:就是抓取网页数据的程序.搜索引擎的底层其实就是爬虫. 百度百科:网络爬虫 关于Python爬虫,我们需要学习的有: Python基础语法学习(基础知识) HTML页面的内容抓取(数据 ...

  2. python语言中文社区-Python 之父谈 Python-Go语言中文社区

    在宣传海报上,Python 之父 Guido van Rossum 在 EuroPython 2015 会议的发言分为讲话稿和现场问答部分,但是他上台后将全程改为现场问答的形式.他在回答现场观众的问题 ...

  3. 爬虫技术python爬到女性语音_python爬虫看看虎牙女主播中谁最“顶”步骤详解

    网页链接:https://www.huya.com/g/4079 这里的主要步骤其实还是和我们之前分析的一样,如下图所示: 这里再简单带大家看一下就行,重点是我们的第二部分. 既然网页结构我们已经分析 ...

  4. python翻译成c语言_将python字典翻译成C语言

    字典将是c中的std :: map,具有两个元素的元组将是std :: pair. 提供的python代码将转换为: #include #include typedef std::map<:pa ...

  5. 爬虫python和c语言区别_爬虫概述 - Python教程 - C语言网

    网络爬虫(又称为网页蜘蛛,网络机器人,更经常的称为网页追逐者),它按照一定的规则自动地抓取网络信息. 1. 产生背景 随着时代的进步,互联网上拥有大量的信息,但是我们该如何高效的获取这些信息成为了一个 ...

  6. 爬虫技术python流程图_爬虫学多久能爬取大规模数据!神级程序员:这篇够你学一个月!...

    利用爬虫我们可以获取大量的价值数据,从而获得感性认识中不能得到的信息,比如: 在目标的驱动下,你的学习才会更加精准和高效.那些所有你认为必须的前置知识,都是可以在完成目标的过程中学到的.这里给你一条平 ...

  7. 爬虫python代码广告_零基础掌握百度地图兴趣点获取POI爬虫(python语言爬取)(代码篇)...

    我是怎么想的,在新浪博客里写代码教程. 这篇博客的内容同步到了CSND博客中,那里不限制外链,也可以复制代码. http://blog.csdn.net/sinat_41310868/article/ ...

  8. 零基础掌握百度地图兴趣点获取POI爬虫(python语言爬取)(代码篇)

    好,现在进入高阶代码篇. 目的: 爬取昆明市中学的兴趣点POI. 关键词:中学 已有ak:9s5GSYZsWbMaFU8Ps2V2VWvDlDlqGaaO 昆明市坐标范围: 左下角:24.390894 ...

  9. go语言爬虫比python高_越来越多的人转行Python爬虫,爬虫真的比其他语言工资更高?-Go语言中文社区...

    导读 爬虫现在越来越火,随之带来的就是一大波的就业岗位,随之越来越多的人转行学习Python,其中不缺乏Java等语言程序员,难道,爬虫在未来会狠狠的压住其他语言,而一直蝉联冠军吗? 什么是爬虫? 说 ...

  10. 【期末课设】python爬虫基础与可视化,使用python语言以及支持python语言的第三方技术实现爬虫功能,定向爬取网页的图片数据,并且实现批量自动命名分类下载。

    1.大作业的内容 本要求使用python语言以及支持python语言的第三方技术实现爬虫功能,定向爬取网页的图片数据,并且实现批量自动命名分类下载. 2.案例需求 要求采用虚拟浏览器等动态爬虫技术,完 ...

最新文章

  1. 关于webservice的异步调用简单实例
  2. jq发送动态变量_山东体育学院康复生物力学团队发文,探索手机行为双任务对动态稳定性控制的影响...
  3. 2020-12-16(虚析构函数,神逻辑代码)
  4. SDL及扩展库在ARM-Linux 完整移植
  5. 可以用数学来证明的中文
  6. html简单用户登录界面_简单实现 nginx 用户登录认证
  7. 刘敏华:2013年网络营销行业展望
  8. 网页视频之H5+Mse
  9. 又是一个github吗? Kubernetes 初创公司 Heptio被VMware 收购
  10. bzoj1565: [NOI2009]植物大战僵尸
  11. 声艺数字调音台si说明书32路_声艺Si Expression 3 32路数字调音台
  12. 感性电路电流计算_三相电的电功率的计算公式_200KW三相四线制线路,需要多少A电源空开?...
  13. 数仓建模—建模工具PDMan(CHINER) 入门介绍
  14. 什么软件能测试电脑能不能玩lol,怎么测试自己电脑能不能玩英雄联盟
  15. 基于Qt的UDP传输文字聊天小软件实现
  16. 光盘/硬盘“无法复制:数据错误(循环冗余检查)”的解决方案
  17. matplotlib is required for plotting.
  18. 参考《机器学习实战》高清中文PDF+高清英文PDF+源代码
  19. 《韩非子》——《孤愤》
  20. 齐岳:环糊精修饰Fe3O4磁性纳米复合材料|十二烷基硫酸钠(SDS)将Fe3O4磁性纳米粒子定量地修饰到多壁碳纳米管

热门文章

  1. vue-(prop验证-个人名片)
  2. 如何将 EXCEL 数据写入数据库
  3. elasticsearch-01
  4. 超级经典的图书下载网站:梦远书城
  5. Java阿拉伯数字转换为大写数字
  6. lisp 车位块自动编号_CAD如何生成自动编号
  7. 解决windows server 2012R2操作系统激活报错0xc000022
  8. (附源码)springboot教材订购系统 毕业设计 081419
  9. Aspose Word模板使用总结
  10. 油猴插件swagger复制路由等