溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何用R語言擼了一個簡易代理

發(fā)布時間:2021-11-22 09:40:32 來源:億速云 閱讀:145 作者:柒染 欄目:大數(shù)據(jù)

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

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

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

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

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

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

爬的目標網(wǎng)址是國內的西刺高匿代理,很早就聽大佬們說免費的代理沒有好貨,因為匿名代理很多有時限,在加上首頁的可能很多開發(fā)者都在用,所以即便你爬再多,可用的也有限。我一共爬了前6頁,用RCul+XML結合,以百度搜索首頁為目標網(wǎng)址,簡單篩選了一下,600個ip只篩了13個可用的~_~。

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

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

加載擴展包:

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

獲取可用User-Agent

#在這個網(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()
#生成隨機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存活時間\t\t驗證時間")    url <- paste0("http://www.xicidaili.com/nn/",i)    headers <- c("User-Agent"=RandomUA())
   #設置錯誤記錄    d <- debugGatherer()
   #構造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地址、端口、存活時間、驗證時間    ip_addrs <- myproxy %>% xpathSApply('//tr/td[2]',xmlValue)  #IP地址    port     <- myproxy %>% xpathSApply('//tr/td[3]',xmlValue)  #端口    sur_time <- myproxy %>% xpathSApply('//tr/td[9]',xmlValue)  #存活時間    ver_time <- myproxy %>% xpathSApply('//tr/td[10]',xmlValue) #驗證時間     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()

檢驗代理IP是否有效:

testProxy <- function(myproxies){
  tmp_proxies = c()
  tarURL <- "https://www.baidu.com/" 
  headers <- c("User-Agent"=RandomUA())
  d <- debugGatherer()  for (ip in myproxies) {
   #構造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語言擼了一個簡易代理

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

看完上述內容,你們對如何用R語言擼了一個簡易代理有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。

AI