r语言爬虫和python爬虫哪个好-R语言爬虫常用方法总结(以案例说明)
原标题: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语言爬虫常用方法总结(以案例说明)相关推荐
- python爬虫百科-Python从概念上先了解爬虫
什么是爬虫 爬虫:就是抓取网页数据的程序.搜索引擎的底层其实就是爬虫. 百度百科:网络爬虫 关于Python爬虫,我们需要学习的有: Python基础语法学习(基础知识) HTML页面的内容抓取(数据 ...
- python语言中文社区-Python 之父谈 Python-Go语言中文社区
在宣传海报上,Python 之父 Guido van Rossum 在 EuroPython 2015 会议的发言分为讲话稿和现场问答部分,但是他上台后将全程改为现场问答的形式.他在回答现场观众的问题 ...
- 爬虫技术python爬到女性语音_python爬虫看看虎牙女主播中谁最“顶”步骤详解
网页链接:https://www.huya.com/g/4079 这里的主要步骤其实还是和我们之前分析的一样,如下图所示: 这里再简单带大家看一下就行,重点是我们的第二部分. 既然网页结构我们已经分析 ...
- python翻译成c语言_将python字典翻译成C语言
字典将是c中的std :: map,具有两个元素的元组将是std :: pair. 提供的python代码将转换为: #include #include typedef std::map<:pa ...
- 爬虫python和c语言区别_爬虫概述 - Python教程 - C语言网
网络爬虫(又称为网页蜘蛛,网络机器人,更经常的称为网页追逐者),它按照一定的规则自动地抓取网络信息. 1. 产生背景 随着时代的进步,互联网上拥有大量的信息,但是我们该如何高效的获取这些信息成为了一个 ...
- 爬虫技术python流程图_爬虫学多久能爬取大规模数据!神级程序员:这篇够你学一个月!...
利用爬虫我们可以获取大量的价值数据,从而获得感性认识中不能得到的信息,比如: 在目标的驱动下,你的学习才会更加精准和高效.那些所有你认为必须的前置知识,都是可以在完成目标的过程中学到的.这里给你一条平 ...
- 爬虫python代码广告_零基础掌握百度地图兴趣点获取POI爬虫(python语言爬取)(代码篇)...
我是怎么想的,在新浪博客里写代码教程. 这篇博客的内容同步到了CSND博客中,那里不限制外链,也可以复制代码. http://blog.csdn.net/sinat_41310868/article/ ...
- 零基础掌握百度地图兴趣点获取POI爬虫(python语言爬取)(代码篇)
好,现在进入高阶代码篇. 目的: 爬取昆明市中学的兴趣点POI. 关键词:中学 已有ak:9s5GSYZsWbMaFU8Ps2V2VWvDlDlqGaaO 昆明市坐标范围: 左下角:24.390894 ...
- go语言爬虫比python高_越来越多的人转行Python爬虫,爬虫真的比其他语言工资更高?-Go语言中文社区...
导读 爬虫现在越来越火,随之带来的就是一大波的就业岗位,随之越来越多的人转行学习Python,其中不缺乏Java等语言程序员,难道,爬虫在未来会狠狠的压住其他语言,而一直蝉联冠军吗? 什么是爬虫? 说 ...
- 【期末课设】python爬虫基础与可视化,使用python语言以及支持python语言的第三方技术实现爬虫功能,定向爬取网页的图片数据,并且实现批量自动命名分类下载。
1.大作业的内容 本要求使用python语言以及支持python语言的第三方技术实现爬虫功能,定向爬取网页的图片数据,并且实现批量自动命名分类下载. 2.案例需求 要求采用虚拟浏览器等动态爬虫技术,完 ...
最新文章
- 关于webservice的异步调用简单实例
- jq发送动态变量_山东体育学院康复生物力学团队发文,探索手机行为双任务对动态稳定性控制的影响...
- 2020-12-16(虚析构函数,神逻辑代码)
- SDL及扩展库在ARM-Linux 完整移植
- 可以用数学来证明的中文
- html简单用户登录界面_简单实现 nginx 用户登录认证
- 刘敏华:2013年网络营销行业展望
- 网页视频之H5+Mse
- 又是一个github吗? Kubernetes 初创公司 Heptio被VMware 收购
- bzoj1565: [NOI2009]植物大战僵尸
- 声艺数字调音台si说明书32路_声艺Si Expression 3 32路数字调音台
- 感性电路电流计算_三相电的电功率的计算公式_200KW三相四线制线路,需要多少A电源空开?...
- 数仓建模—建模工具PDMan(CHINER) 入门介绍
- 什么软件能测试电脑能不能玩lol,怎么测试自己电脑能不能玩英雄联盟
- 基于Qt的UDP传输文字聊天小软件实现
- 光盘/硬盘“无法复制:数据错误(循环冗余检查)”的解决方案
- matplotlib is required for plotting.
- 参考《机器学习实战》高清中文PDF+高清英文PDF+源代码
- 《韩非子》——《孤愤》
- 齐岳:环糊精修饰Fe3O4磁性纳米复合材料|十二烷基硫酸钠(SDS)将Fe3O4磁性纳米粒子定量地修饰到多壁碳纳米管