今天就跟大家聊聊有關(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()
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)