温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何用R语言撸了一个简易代理

发布时间:2021-11-22 09:40:32 阅读:165 作者:柒染 栏目:大数据
开发者测试专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

今天就跟大家聊聊有关如何用R语言撸了一个简易代理,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

最近正在刻苦的学习爬虫,陆陆续续的学习了正则表达式、xpath、css表达式,基本可以胜任R语言中的RCurl+XML、httr+rvest组合爬虫的需求,对GET请求和POST请求的构造和表单提交以及浏览器抓包、模拟登陆、异步加载也做了一些梳理,因为爬虫知识的通用性,所以在入门Python阶段直接就开始练习urllib+lxml、requests+BeautifulSoup。

爬虫的入门也算有了一点儿小小的心得,下一步计划在不断练习巩固现有知识的同时、对服务器的反反爬进行探索,这里涉及到如何使用随机agent、如何构造匿名代理IP以及如何使用多进程,要走的路还有很长。

之前一直有计划去爬豆瓣热门影视剧短评,试过好几次,豆瓣短评页是需要登陆后查看的,而且热门影视剧的短评通常都不会少于10000+页,这样频次的请求稍有不慎就会被封ip,所以一直在研究如何友好、温和的解决这个问题。

前几天看到Python爱好者社区的大婶们用Python写了代理池的代码,就想着用R语言也撸一个,那个代码提供了多进程检测代理IP有效性的方案,可是我对R语言的多进程还了解不够,只能用笨办法一点儿一点儿检测,很耗时,虽然笨一点,但是最后也算运行成功了。

爬取IP代理偷偷给文章刷阅读量

爬的目标网址是国内的西刺高匿代理,很早就听大佬们说免费的代理没有好货,因为匿名代理很多有时限,在加上首页的可能很多开发者都在用,所以即便你爬再多,可用的也有限。我一共爬了前6页,用RCul+XML结合,以百度搜索首页为目标网址,简单筛选了一下,600个ip只筛了13个可用的~_~。

不过话又说回来了,西刺一共有2000+页代理ip,一共加起来差不多20万+个代理,如果你不嫌麻烦,可以慢慢搞一遍,不过要友好一点儿!想要好用的,据说有钱能使磨推鬼!

以下是我个人使用R语言仿照上面那篇文章的思路写的一个简易IP代理抓取与检测代码。

加载扩展包:

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

获取可用User-Agent

#在这个网页上找到了一些可用的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()#生成随机UARandomUA<-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语言撸了一个简易代理有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。

亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

原文链接:https://my.oschina.net/u/3335309/blog/4391529

AI

开发者交流群×