设为首页收藏本站获取积分奖励

R语言中文网

 找回密码
 立即注册
查看: 13597|回复: 22

[实例投稿提交] 用R抓取人民日报网2013年4季度所有数据

[复制链接]
发表于 2014-9-1 08:35:49 | 显示全部楼层 |阅读模式
本帖最后由 Ashburn 于 2014-9-1 08:47 编辑

【作者】(必填):Ashburn

【问题描述】(必填):
       昨晚实现了人民网2013年4个季度所有指标数据的抓取。虽然抓取结果能在R console中显示,但并没能保存在Excel或文本文档中,代码还有不少缺陷,仍需优化,也请各位指教。

【R语言代码】(点击编辑器中"<>"插入代码):
  1. library(RCurl)

  2. for (i in 1:4) {
  3. base <- "http://vip.stock.finance.sina.com.cn/corp/go.php/vMS_MarketHistory/stockid/603000.phtml?year=2013&jidu="
  4. jidu <- i
  5. url <- paste(base,jidu,sep='')

  6. temp <- getURL(url)
  7. k=strsplit(temp,"\r\n")[[1]]    #以list形式展现,方便以下操作

  8.    #抓取日期
  9.    timeadr <- k[grep("<a target='_blank'",k)+1]  #第1行  日期  
  10.    time=substring(timeadr,4,13)
  11.    print(unlist(strsplit(time," ")))

  12.    #抓取  开盘价,最高价,收盘价,最低价
  13.    for(j in 3:6)  #一个季度源代码中第3到6行  
  14.       {

  15.          xxx <- k[grep("<a target='_blank'",k)+j]  #   所需信息
  16.          xx <- gregexpr(">\\d+",xxx)    #找出指定元素在本行第几位


  17.          for(m in 1:length(xxx))
  18.             {
  19.                 yy=xx[[m]]
  20.                 xxs=substring(xxx[m],yy+1,yy+attr(yy,'match.length')+3)  #3:6行+3  
  21.                 print(xxs)   #每次循环都输出该值  
  22.              }

  23.        }


  24.     #抓取交易量
  25.     xxx=k[grep("<a target='_blank'",k)+7]   #抓取路径下第7行   交易量
  26.     xx=gregexpr(">\\d+",xxx)    #找出指定元素在本行第几位
  27.     for(n in 1:length(xxx))
  28.        {
  29.           yy=xx[[n]]
  30.           xxs=substring(xxx[n],yy+1,yy+attr(yy,'match.length')-1)  #3:6行+3  7行-1 8行-1
  31.           print(xxs)   #每次循环都输出该值  
  32.        }
  33.     #抓取交易金额
  34.     xxx=k[grep("<a target='_blank'",k)+8]   #抓取路径下第8行   交易金额
  35.     xx=gregexpr(">\\d+",xxx)    #找出指定元素在本行第几位
  36.     for(o in 1:length(xxx))
  37.        {
  38.           yy=xx[[o]]
  39.           xxs=substring(xxx[o],yy+1,yy+attr(yy,'match.length')-1)  #3:6行+3  7行-1 8行-1
  40.           print(xxs)   #每次循环都输出该值  
  41.        }

  42. }
复制代码


回复

使用道具 举报

 楼主| 发表于 2014-9-1 08:37:28 | 显示全部楼层
需要的基础有:RCurl包及其函数,R字符处理,正则表达式
回复 支持 反对

使用道具 举报

发表于 2014-9-2 15:44:02 | 显示全部楼层
学习观摩中 。。。。。。。
回复 支持 反对

使用道具 举报

发表于 2014-9-5 23:11:43 | 显示全部楼层
请教一个问题,就是你的k=strsplit(temp,"\r\n")[[1]]    #以list形式展现,方便以下操作

这行,strsplit函数中  怎么用\r\n呢??这个有什么用吗
回复 支持 反对

使用道具 举报

发表于 2014-9-5 23:13:46 | 显示全部楼层
还有就是,我在试着你的代码,但是我的k=strsplit(temp,"\r\n")[[1]]   这步,得出的结果是源代码总共是一行,而不是像你的那样很多行?是什么原因?http://www.ncbi.nlm.nih.gov/nuccore/?term=Aleochara+18S  这是我用的网址
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-6 23:31:52 | 显示全部楼层
xucaifeng 发表于 2014-9-5 23:11
请教一个问题,就是你的k=strsplit(temp,"\r\n")[[1]]    #以list形式展现,方便以下操作

这行,strspli ...

因为在网页源代码中,一般是以\r\n来换行的,所以用它来切割
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-6 23:34:34 | 显示全部楼层
xucaifeng 发表于 2014-9-5 23:13
还有就是,我在试着你的代码,但是我的k=strsplit(temp,"\r\n")[[1]]   这步,得出的结果是源代码总共是一 ...

总是一行的原因是,每一次的输出把上一次的结果覆盖了,这样一来只剩最后一次输出的结果了。
回复 支持 反对

使用道具 举报

发表于 2014-9-7 12:17:08 | 显示全部楼层
Ashburn 发表于 2014-9-6 23:34
总是一行的原因是,每一次的输出把上一次的结果覆盖了,这样一来只剩最后一次输出的结果了。

不是覆盖了,是所有的代码都在一行中,就像是一整个字符串。
不过我用"<[a-z]+>"分割已经把问题解决。
但是现在又出现了新的问题,因为有的网页它是翻页的,就是一个关键词搜索出的结果分成好几页,翻页的过程中网址竟然不是规律的变!!
比如:
我用“Atheta 18S”搜索,得到的结果中第一页的网址是http://www.ncbi.nlm.nih.gov/nuccore/?term=Atheta+18S
但是翻页后第二页第三页就变成了这个:http://www.ncbi.nlm.nih.gov/nuccore,这只是在上面的网址中去掉了“/?term=Atheta+18S“

然后我换个关键词搜索,用”Pica 18S“, 得到的结果中第一页的网址是http://www.ncbi.nlm.nih.gov/nuccore/?term=Pica+18S
但是第二页的网址也是:http://www.ncbi.nlm.nih.gov/nuccore, 这就跟上面的额第二页的网址是一样的了?

我想问一下,你知道怎么将翻页的数据一起读出来吗?
回复 支持 反对

使用道具 举报

发表于 2014-9-16 12:47:21 | 显示全部楼层
好棒哦,啦啦啦
回复 支持 反对

使用道具 举报

发表于 2014-9-16 12:47:39 | 显示全部楼层
好棒哦,啦啦啦!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Archiver|R语言中文网    

GMT+8, 2024-5-1 12:04 , Processed in 0.036731 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表