如何用R語言擼了一個(gè)簡易代理

今天就跟大家聊聊有關(guān)如何用R語言擼了一個(gè)簡易代理,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、微信小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了倉山免費(fèi)建站歡迎大家使用!

最近正在刻苦的學(xué)習(xí)爬蟲,陸陸續(xù)續(xù)的學(xué)習(xí)了正則表達(dá)式、xpath、css表達(dá)式,基本可以勝任R語言中的RCurl+XML、httr+rvest組合爬蟲的需求,對(duì)GET請(qǐng)求和POST請(qǐng)求的構(gòu)造和表單提交以及瀏覽器抓包、模擬登陸、異步加載也做了一些梳理,因?yàn)榕老x知識(shí)的通用性,所以在入門Python階段直接就開始練習(xí)urllib+lxml、requests+BeautifulSoup。

爬蟲的入門也算有了一點(diǎn)兒小小的心得,下一步計(jì)劃在不斷練習(xí)鞏固現(xiàn)有知識(shí)的同時(shí)、對(duì)服務(wù)器的反反爬進(jìn)行探索,這里涉及到如何使用隨機(jī)agent、如何構(gòu)造匿名代理IP以及如何使用多進(jìn)程,要走的路還有很長。

之前一直有計(jì)劃去爬豆瓣熱門影視劇短評(píng),試過好幾次,豆瓣短評(píng)頁是需要登陸后查看的,而且熱門影視劇的短評(píng)通常都不會(huì)少于10000+頁,這樣頻次的請(qǐng)求稍有不慎就會(huì)被封ip,所以一直在研究如何友好、溫和的解決這個(gè)問題。

前幾天看到Python愛好者社區(qū)的大嬸們用Python寫了代理池的代碼,就想著用R語言也擼一個(gè),那個(gè)代碼提供了多進(jìn)程檢測(cè)代理IP有效性的方案,可是我對(duì)R語言的多進(jìn)程還了解不夠,只能用笨辦法一點(diǎn)兒一點(diǎn)兒檢測(cè),很耗時(shí),雖然笨一點(diǎn),但是最后也算運(yùn)行成功了。

爬取IP代理偷偷給文章刷閱讀量

爬的目標(biāo)網(wǎng)址是國內(nèi)的西刺高匿代理,很早就聽大佬們說免費(fèi)的代理沒有好貨,因?yàn)槟涿砗芏嘤袝r(shí)限,在加上首頁的可能很多開發(fā)者都在用,所以即便你爬再多,可用的也有限。我一共爬了前6頁,用RCul+XML結(jié)合,以百度搜索首頁為目標(biāo)網(wǎng)址,簡單篩選了一下,600個(gè)ip只篩了13個(gè)可用的~_~。

不過話又說回來了,西刺一共有2000+頁代理ip,一共加起來差不多20萬+個(gè)代理,如果你不嫌麻煩,可以慢慢搞一遍,不過要友好一點(diǎn)兒!想要好用的,據(jù)說有錢能使磨推鬼!

以下是我個(gè)人使用R語言仿照上面那篇文章的思路寫的一個(gè)簡易IP代理抓取與檢測(cè)代碼。

加載擴(kuò)展包:

library("RCurl")  
library("XML") 
library("dplyr")

獲取可用User-Agent

#在這個(gè)網(wǎng)頁上找到了一些可用的user-agent:
GetUserAgent<-function(){  url<-"http://www.atool.org/useragent.php"  content<-url %>% getURL(encoding='utf-8') %>% htmlParse()  UserAgent<-content %>% xpathSApply("//ul[@class='new_tools_list']/li[@class='green']",xmlValue) %>% .[1:(length(.)-1)]  return(UserAgent) }
###獲取UA(user-agent)
myuseragent<-GetUserAgent()
#生成隨機(jī)UA
RandomUA<-function() sample(myuseragent,1,replace=TRUE) RandomUA()

爬取代理列表:

getProxies<-function(){
  init_proxies=c()
 for (i in 1:6){    print("####")    print(paste0("####爬取第",i,"頁####"))    print("####")    print("IP地址\t\t\t端口\t存活時(shí)間\t\t驗(yàn)證時(shí)間")    url <- paste0("http://www.xicidaili.com/nn/",i)    headers <- c("User-Agent"=RandomUA())
   #設(shè)置錯(cuò)誤記錄    d <- debugGatherer()
   #構(gòu)造curl句柄收集登錄信息,開啟cookiefile管理器:    chandle <- getCurlHandle(debugfunction=d$update,followlocation=TRUE,cookiefile="",verbose = TRUE)    result = tryCatch({      content <- url %>% getURL(curl=chandle,httpheader=headers,.encoding='utf-8')      }, error = function(e) {      cat("ERROR :",conditionMessage(e),"\n")     })    myproxy <- content %>% htmlParse()    #提取IP地址、端口、存活時(shí)間、驗(yàn)證時(shí)間    ip_addrs <- myproxy %>% xpathSApply('//tr/td[2]',xmlValue)  #IP地址    port     <- myproxy %>% xpathSApply('//tr/td[3]',xmlValue)  #端口    sur_time <- myproxy %>% xpathSApply('//tr/td[9]',xmlValue)  #存活時(shí)間    ver_time <- myproxy %>% xpathSApply('//tr/td[10]',xmlValue) #驗(yàn)證時(shí)間     for (j in 1:length(ip_addrs)){      ip <- paste0(ip_addrs[j],":",port[j])      init_proxies <- c(init_proxies,ip)
     #輸出ip      print(paste0(ip_addrs[j],"\t\t",port[j],"\t\t",sur_time[j],"\t",ver_time[j]))     }   }  return (init_proxies) }
     
###獲取代理IP:
myproxies<-getProxies()

檢驗(yàn)代理IP是否有效:

testProxy <- function(myproxies){
  tmp_proxies = c()
  tarURL <- "https://www.baidu.com/" 
  headers <- c("User-Agent"=RandomUA())
  d <- debugGatherer()  for (ip in myproxies) {
   #構(gòu)造curl句柄收集登錄信息,開啟cookiefile管理器:    chandle <- getCurlHandle(debugfunction=d$update,followlocation=TRUE,cookiefile="",proxy=ip,verbose = TRUE)    Error <- try(tarURL %>% getURL(curl=chandle,httpheader=headers,.opts=list(maxredirs=2,ssl.verifypeer=FALSE,verbose=TRUE,timeout=5)),silent=TRUE)
   if(!'try-error' %in% class(Error)){    tmp_proxies<-c(tmp_proxies,ip)    } else {
     next    }  Sys.sleep(sample(1:2,1,replace=TRUE))  }
 return(tmp_proxies) } ###返回有效代理: UsefulProxy <- sapply(myproxies,testProxy)  %>% unlist %>% na.omit() %>% unname()

如何用R語言擼了一個(gè)簡易代理

600個(gè)ip,只篩選除了寥寥無幾的13個(gè),痛哭流涕?。?!

看完上述內(nèi)容,你們對(duì)如何用R語言擼了一個(gè)簡易代理有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。

網(wǎng)站題目:如何用R語言擼了一個(gè)簡易代理
網(wǎng)站URL:http://www.muchs.cn/article0/jpjeoo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開發(fā)、網(wǎng)站制作、網(wǎng)站建設(shè)、面包屑導(dǎo)航、品牌網(wǎng)站建設(shè)定制網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司