標籤:
RCurl
==RCurl、XML、RSPython、Rmatlab
個人首頁:http://anson.ucdavis.edu/~duncan/
(一)什麼是curl
curl:利用URL文法在命令列的方式下工作的開元檔案傳輸工具
curl背後的庫就是libcurl
功能為:獲得頁面,有關認證,上傳下載,資訊搜尋
(二)Http協議目前使用的是HTTP/1.1
它允許將超文字標記語言 (HTML)(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秒
R-大資料分析挖掘(2-R爬蟲)