今天看啥
    热点:

      天发国际娱乐官网:  推进“两学一做”学习教育常态化制度化,还应当着力抓好如下重点工作:  紧紧围绕加强党的思想政治建设来进行。

      用R语言照葫芦画瓢撸了一个简易代理~,瓢撸



      作者简介Introduction

      杜雨:EasyCharts团队成员,R语言中文社区专栏作者。

      兴趣方向为:Excel商务图表,R语言数据可视化,地理信息数据可视化。

      个人公众号:数据小魔方(微信ID:datamofang)?,“数据小魔方”创始人。


      往期回顾

      R语言数据抓取实战——RCurl+XML组合与XPath解析

      R语言网络数据抓取的又一个难题,终于攻破了!

      往期案例数据请移步本人GitHub:
      http://www.1click-soft.com/tfgjylgw/ljtyduyu/DataWarehouse/tree/master/File

      最近正在刻苦的学习爬虫,陆陆续续的学习了正则表达式、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.1click-soft.com/tfgjylgw/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.1click-soft.com/tfgjylgw/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 <- "http://www.1click-soft.com/tfgjylgw/" 
       ?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()

      600个ip,只筛选除了寥寥无几的13个,痛哭流涕!!!


      往期精彩内容整理合集:

      2017年R语言发展报告(国内)

      R语言中文社区历史文章整理(作者篇)

      R语言中文社区历史文章整理(类型篇)

      相关课程推荐


      R语言可视化在商务场景中的应用:

      ????戳阅读原文,即刻加入课程。

      www.1click-soft.comtruehttp://www.1click-soft.com/wlaqjs/1311287.htmlTechArticle用R语言照葫芦画瓢撸了一个简易代理~,瓢撸 作者简介 Introduction 杜雨: EasyCharts团队成员,R语言中文社区专栏作者。 兴趣方向为:Excel商...

      相关文章

        暂无相关文章
      相关搜索:

      帮客评论

      视觉看点
      百度 360 搜狗