R-大資料分析挖掘(2-R爬蟲)

來源:互聯網
上載者:User

標籤:

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爬蟲)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.