总访问量: PV

DataScience && DataMining && BigData

R-大数据分析挖掘(2-R爬虫)

RCurl作者:

==RCurl、XML、RSPython、Rmatlab

个人主页:http://anson.ucdavis.edu/~duncan/

(一)什么是curl

      curl:利用URL语法在命令行的方式下工作的开元文件传输工具

      curl背后的库就是libcurl

      功能为:获得页面,有关认证,上传下载,信息搜索

(二)Http协议目前使用的是HTTP/1.1

它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器

(三)Rcurl三大函数

1.install.packages("RCurl")
2.
  • getUrl()
  • getForm()
  • postForm()

利用getUrl查看相关信息  url.exists()

(1)

实验代码:

     

(2)

 

(3)

实验:

(4)

myheader <- c(
"User-Agent"="Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1.6) ",
"Accept"="text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Accept-Language"="en-us",
"Connection"="keep-alive",
"Accept-Charset"="GB2312,utf-8;q=0.7,*;q=0.7")

注:

(5)

(三)curl部分参数设置

 

(四)XMLParse

需要安装:XML

表格、 网页节点

对标准 XML 文件的解析函数xmlParse

对html的解析函数htmlTreeParse

下载表格:

 

(五)

抓取地震数据:

url <-" http://data.earthquake.cn/datashare/datashare_more_quickdata_new.jsp";
wp <- getURL(url)

doc <-htmlParse(wp,asText = TRUE)

tables <- readHTMLTable(doc,header=F)

参数which:

出错::

(六)Xpath

 

综合实例:R抓取CSDN数据

crawler<-function(url,xpath,content="text"){
    num_url<-length(url)
    result<-data.frame(url=0,vari=0)
    i<-1#记录第几个url
    tmp<-1#
    for(i_url in url){
        i_url_parse<-htmlParse(i_url,encoding="UTF-8")#读取url网页数据,并使用htmlParse转化。(xml文件使用xmlParse)
        node<-getNodeSet(i_url_parse,xpath)#通过xpath找到相应变量的xpath结点

        if(length(node)==0){#未爬取到数据,说明xpath有误
            result[tmp,1]<-i
            result[tmp,2]<-NA
            print(paste("注意:变量未能在第",i,"个页面中找到,我们会把该数据写为空值"))
            tmp<-tmp+1
        }else{
    
            for(j in 1:length(node)){
                result[tmp,1]<-i
                if(content=="text"){#欲爬取变量的内容
                    result[tmp,2]<-xmlValue(node[[j]])

                }else{#欲爬取变量的属性

		    print(node[[j]])
                    result[tmp,2]<-xmlGetAttr(node[[j]],content)
                    
                }
                tmp<-tmp+1
            }
        }
        i<-i+1
    }
    result
}

url1<-"http://www.csdn.net/tag/"
xpath<-"//div[@class='overflow']/a"
content<-"text"
crawler(url1,xpath,content)

 

注意:

1.抓取地震数据
2.爬虫的多线程
  1. 爬取任务的管理问题:
     需要先将爬取的url列表,分成一些task,不同的task由不同的r程序进行处理
     任务的处理状态,需要r 更新到任务的维护列表
     出现任务挂掉时,需要可以读取上次任务爬取的点,数据库
     如果量很大:可以通过redis
  2.爬取程序,需要写成r程序脚本
     linux: crontab
     windows: 计划任务
3.爬取动态ip的问题
  1.爬虫的动态代理
    1.先获取一个iP池,百度搜索ip代理
    2.在程序中,动态的换 http 的ip属性
爬的过程要保持一个间隔,4秒

 

posted @ 2016-01-11 17:47  CJZhaoSimons  阅读(532)  评论(4编辑  收藏  举报