比如说从网页“http://nba.sports.sina.com.cn/player.php?id=4563”上提取数据你会吗?

回复 第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,就不出错了。

4 个月 后

回复 第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:

从别处转发了一下。