比如说从网页“http://nba.sports.sina.com.cn/player.php?id=4563”上提取数据你会吗?
利用R如何实现网页数据抓取
回复 第1楼 的 liyichao:
在R里面的解决方案是:先用RCurl包下载网页,再用XML包及正则表达式解析提取数据。
Shell里面:curl下载,管道给sed,配合正则表达式,提取数据。
学学正则表达式吧,少年。[s:11]
回复 第1楼 的 liyichao:
这个还是比较需要看页面代码,浏览器打开查看页面源代码。
回复 第3楼 的 lyxmoo:我想从网页“http://t.cn/zHEbWwg”上提取数据,我的代码如下:
require(Rcurl)
require(rjson)
require(stringr)
require(XML)
url = "http://t.cn/zHEbWwg"
doc = getURL(url) txt = htmlParse(doc, asText = TRUE) tab = readHTMLTable(txt, which = 1, header = TRUE)
但输出结果报错:
> tab3 = readHTMLTable(txt3, which = 1, header = TRUE)
错误于nchar(els[[1]]) : 多字节字符串31有错
我实在找不到解决的方案,麻烦你帮我看看是什么情况,谢谢。
回复 第2楼 的 doctorjxd:谢谢doctorjxd的耐心解答,“正则表达式解析提取数据”这个我之前还真没听说过,好的,我找找相关资料看看。
调整下参数试试,which=2,header=F
回复 第6楼 的 knightwj:改了参数果然行了,谢谢6楼的指点[s:13]
最近正关注这个呢,也学习一下
学习了
不明白的是为什么header=FALSE,就不出错了。
回复 第7楼 的 liyichao:您好,我试了一下你的代码,但是最后一步tab = readHTMLTable(txt, which = 1, header = TRUE) 报错如下:
tab = readHTMLTable(txt, which = 2, header = F)
Error in (function (classes, fdef, mtable) :
unable to find an inherited method for function ‘readHTMLTable’ for signature ‘"NULL"’
求指导,谢谢!!
回复 第2楼 的 doctorjxd:
doctorjxd老师,我想请教下,如果先撇开正则表达式这个难题,
就是抓取网页数据通常用RCurl和XML这两个包,简单的情况可以直接
用R自带的download.file命令。有些时候可能只要一个简单的函数就可以
搞定,比如直接用download.file。而有的时候则需要RCurl和XML两个包
里面函数的组合,比如
require(RCurl)
require(XML)
url = 'http://www.chinamoney.com.cn/fe-c/interestRateSwapCurve3MHistoryAction.do?bigthType=FR007'
doc = getURL(url)
txt = htmlParse(doc, asText = TRUE)
tab = readHTMLTable(txt, which = 6, header = TRUE)
或者下面的帖子
http://cos.name/cn/topic/107477
这个有无简单的规则可以区分?
如果知道了下载某个数据需要用到哪些命令,我们再看命令的帮助,就简单些。
ps:上述问题可能太泛了,或者太难回答,我只是很想了解部分,谢谢了。
download.file函数及RCurl包都是负责直接下载网上的文件。
下载之后,如果需要进一步解析提取文件中的数据,可以采用XML或正则表达式进行提取。
关于这方面的内容,肖楠版主在第 6 届 R 语言会议上做过非常详尽的报告。
http://bbs.chinaunix.net/attachment.php?aid=NjQ4Mzk2fDBlZjk5OTk1fDEzODE0Njk1MDh8NDg2MTY5fDQxMDEzNzQ%3D&fid=24
回复 第12楼 的 doctorjxd:
好的,非常感谢您。
回复 第12楼 的 doctorjxd:
改一下上述地址的发布方式,因为基本上已经暴露了站点文件目录规则。
回复 第13楼 的 ywh19860616:
不客气,共同学习。
回复 第14楼 的 zggjtsgzczh:
从别处转发了一下。