java抓取数据+破解屏蔽ip访问【多线程数据采集之三】

简介:

java抓取数据+破解屏蔽ip访问

今天就讲解一下,怎么破解 服务器 屏蔽ip的请求。

现在大多网站采取 ip访问次数达到一定次数就屏蔽ip的功能。

那么要破解服务器的屏蔽。 就只有改变ip, 或者代理ip。

如果用代理,哪里去找那么多ip呢。  用adsl 获取动态ip不是很简单吗。

转载注明出处:http://blog.csdn.net/column/details/threadgrab.html

那么现在就贴上adsl获取动态ip的方案实例源码

1、抓取网页数据的时候  catch异常之后 , 就采取拨号程序

 
  1. //门票浏览  url参数 http://www.lvmama.com/dest/lantiancheng   
  2.     public static DataBean getWebData1(String url){   
  3.         DataBean data = null;   
  4.         try {   
  5.             Document docdata = Jsoup.connect(url).timeout(20000).get();   
  6.                
  7.         } catch (Exception e) {   
  8.             e.printStackTrace();   
  9.                         //拨号一下   
  10.                         ConnectAdslNet.reconnectAdsl("宽带",Main.adslname,Main.adslpass);   
  11.         }   
  12.         return data;   
  13.     }   

2、拨号获取动态ip的 工具类

 
  1. import java.io.BufferedReader;   
  2. import java.io.InputStreamReader;   
  3.    
  4. import org.apache.log4j.Logger;   
  5.    
  6. /**  
  7.  *   
  8.  * ADSL拨号上网  
  9.  * Windwos操作系统需要是GBK编码  
  10.  * @author yijianfeng  
  11.  *   
  12.  */   
  13.    
  14. public class ConnectAdslNet {   
  15.     static Logger logger = Logger.getLogger(ConnectAdslNet.class);   
  16.        
  17.      /**   
  18.      * 执行CMD命令,并返回String字符串   
  19.      */     
  20.     public static String executeCmd(String strCmd) throws Exception {     
  21.         Process p = Runtime.getRuntime().exec("cmd /c " + strCmd);     
  22.         StringBuilder sbCmd = new StringBuilder();     
  23.            
  24.         //注意编码 GBK   
  25.         BufferedReader br = new BufferedReader(new InputStreamReader(p     
  26.                 .getInputStream(),"GBK"));     
  27.         String line;     
  28.         while ((line = br.readLine()) != null) {     
  29.             sbCmd.append(line + "\n");     
  30.         }     
  31.         return sbCmd.toString();     
  32.     }     
  33.      
  34.     /**   
  35.      * 连接ADSL   
  36.      */     
  37.     public static boolean connectAdsl(String adslTitle, String adslName, String adslPass) throws Exception {     
  38.         System.out.println("正在建立连接.");     
  39.         String adslCmd = "rasdial " + adslTitle + " " + adslName + " "     
  40.                 + adslPass;     
  41.         String tempCmd = executeCmd(adslCmd);     
  42.            
  43.         // 判断是否连接成功     
  44.         if (tempCmd.indexOf("已连接") > 0) {     
  45.             System.out.println("已成功建立连接.");     
  46.             return true;     
  47.         } else {     
  48.             System.out.println(tempCmd);     
  49.             System.out.println("建立连接失败");     
  50.             return false;     
  51.         }     
  52.     }     
  53.      
  54.     /**   
  55.      * 断开ADSL   
  56.      */     
  57.     public static boolean disconnectAdsl(String adslTitle) throws Exception {     
  58.         String disconnectAdsl = "rasdial " + adslTitle + " /disconnect";     
  59.         String result = executeCmd(disconnectAdsl);          
  60.             
  61.         if (result.indexOf("没有连接")!=-1){     
  62.             System.out.println(adslTitle + "连接不存在!");     
  63.             return false;     
  64.         } else {     
  65.             System.out.println("连接已断开");     
  66.             return true;     
  67.         }     
  68.     }     
  69.        
  70.     /**  
  71.      * adsl重新拨号,尖锋网七七八八网推支持失败不断重拨  
  72.      * @param args  
  73.      * @throws Exception  
  74.      */   
  75.     public static boolean reconnectAdsl(String adslTitle, String adslName, String adslPass){   
  76.         boolean bAdsl = false;   
  77.         try {   
  78.             disconnectAdsl(adslTitle);    
  79.             Thread.sleep(3000);            
  80.             bAdsl = connectAdsl(adslTitle,adslName,adslPass);   
  81.             Thread.sleep(3000);   
  82.             int i = 0;   
  83.             while (!bAdsl){   
  84.                 disconnectAdsl(adslTitle);    
  85.                 Thread.sleep(3000);   
  86.                 bAdsl = connectAdsl(adslTitle,adslName,adslPass);   
  87.                 Thread.sleep(3000);   
  88.                 if(i>5){   
  89.                     break;   
  90.                 }   
  91.             }   
  92.         }catch(Exception e){   
  93.             logger.error("ADSL拨号异常:", e);   
  94.         }   
  95.            
  96.         return bAdsl;          
  97.     }   
  98.         
  99.     public static void main(String[] args) throws Exception {   
  100. //        reconnectAdsl("宽带","adsl账号","密码");     
  101.     }      
  102.        
  103. }   

 

采用上述办法,基本上就可以解决拨号的问题了。 

如果程序加入了多线程。 那么就必须考虑多线程,拨号同步,以及数据同步问题。  提高效率和避免重复操作。

到此,破解屏蔽ip访问就搞定了!

 








      本文转自yjflinchong 51CTO博客,原文链接:http://blog.51cto.com/yjflinchong/1165154,如需转载请自行联系原作者



相关文章
|
数据采集 监控 调度
干货分享“用 多线程 爬取数据”:单线程 + 协程的效率反超 3 倍,这才是 Python 异步的正确打开方式
在 Python 爬虫中,多线程因 GIL 和切换开销效率低下,而协程通过用户态调度实现高并发,大幅提升爬取效率。本文详解协程原理、实战对比多线程性能,并提供最佳实践,助你掌握异步爬虫核心技术。
|
Java 索引
多线程向设备发送数据
多线程向设备发送数据
209 0
|
安全 算法 Java
Java 多线程:线程安全与同步控制的深度解析
本文介绍了 Java 多线程开发的关键技术,涵盖线程的创建与启动、线程安全问题及其解决方案,包括 synchronized 关键字、原子类和线程间通信机制。通过示例代码讲解了多线程编程中的常见问题与优化方法,帮助开发者提升程序性能与稳定性。
499 0
|
Java 数据挖掘 调度
Java 多线程创建零基础入门新手指南:从零开始全面学习多线程创建方法
本文从零基础角度出发,深入浅出地讲解Java多线程的创建方式。内容涵盖继承`Thread`类、实现`Runnable`接口、使用`Callable`和`Future`接口以及线程池的创建与管理等核心知识点。通过代码示例与应用场景分析,帮助读者理解每种方式的特点及适用场景,理论结合实践,轻松掌握Java多线程编程 essentials。
871 5
|
监控 搜索推荐 Java
Java 多线程最新实操技术与应用场景全解析:从基础到进阶
本文深入探讨了Java多线程的现代并发编程技术,涵盖Java 8+新特性,如CompletableFuture异步处理、Stream并行流操作,以及Reactive编程中的Reactor框架。通过具体代码示例,讲解了异步任务组合、并行流优化及响应式编程的核心概念(Flux与Mono)。同时对比了同步、CompletableFuture和Reactor三种实现方式的性能,并总结了最佳实践,帮助开发者构建高效、扩展性强的应用。资源地址:[点击下载](https://pan.quark.cn/s/14fcf913bae6)。
678 3
|
算法 Java 调度
Java多线程基础
本文主要讲解多线程相关知识,分为两部分。第一部分涵盖多线程概念(并发与并行、进程与线程)、Java程序运行原理(JVM启动多线程特性)、实现多线程的两种方式(继承Thread类与实现Runnable接口)及其区别。第二部分涉及线程同步(同步锁的应用场景与代码示例)及线程间通信(wait()与notify()方法的使用)。通过多个Demo代码实例,深入浅出地解析多线程的核心知识点,帮助读者掌握其实现与应用技巧。
241 1
java 多线程异常处理
本文介绍了Java中ThreadGroup的异常处理机制,重点讲解UncaughtExceptionHandler的使用。通过示例代码展示了当线程的run()方法抛出未捕获异常时,JVM如何依次查找并调用线程的异常处理器、线程组的uncaughtException方法或默认异常处理器。文章还提供了具体代码和输出结果,帮助理解不同处理器的优先级与执行逻辑。
288 1
|
数据采集 存储 网络协议
Java HttpClient 多线程爬虫优化方案
Java HttpClient 多线程爬虫优化方案
|
数据采集 存储 安全
Python爬虫实战:利用短效代理IP爬取京东母婴纸尿裤数据,多线程池并行处理方案详解
本文分享了一套结合青果网络短效代理IP和多线程池技术的电商数据爬取方案,针对京东母婴纸尿裤类目商品信息进行高效采集。通过动态代理IP规避访问限制,利用多线程提升抓取效率,同时确保数据采集的安全性和合法性。方案详细介绍了爬虫开发步骤、网页结构分析及代码实现,适用于大规模电商数据采集场景。

热门文章

最新文章