java如果模拟请求重启路由器(网络爬虫常用),还有java如何下载图片

我们如果在公司或家里使用网络爬虫去抓取自己索要的一些数据的时候,常常对方的网站有defence机制,会给你的http请求返回500错误,只要是相同IP就请求不到数据,这时候我们只能去重启路由器,这样IP地址会改变,网络爬虫就能正常工作了

下面是通过发送Socket请求来模拟路由器的重启指令:

protected void rebotadsl() {
			try {
				BufferedOutputStream sender = null;
				String url = baseURL;
				URL target = new URL(url);
				InetAddress address = InetAddress.getByName(target.getHost());
				Socket client = new Socket(address, 8080);
				sender = new BufferedOutputStream(client.getOutputStream());
				String str = "";
				String cmd = "GET "
						+ "/userRpm/StatusRpm.htm?Disconnect=%B6%CF%20%CF%DF&wan=1"
						+ " HTTP/1.0\r\n" + "User-Agent: myselfHttp/1.0\r\n"
						+ "Accept: www/source; text/html; image/gif; */*\r\n"
						+ "Authorization: Basic" + " " + luyou + "\r\n"
						+ "\r\n"; //luyou填写路由器的密码,如YWRtaW46d2FuZzIwMDU=
				sender.write(cmd.getBytes(), 0, cmd.length());
				sender.flush();
				System.out.println("由于重定向路由器断线了");

			} catch (Exception ex) {
				ex.printStackTrace();

			}

		}

当然了,我们得写一个算法来使用这个函数,如两次重启路由器时间不能太短

java下载图片:

/**
	 *发送图片信息到服务器下载图片,应用ISO8859-1
	 */
	public void sendPic(String url,String story,String name){
		setURL(url);
		HttpClient http = new HttpClient();
		http.getHttpConnectionManager().getParams().setConnectionTimeout(100000);
		GetMethod get=null;
	      try{
	       get = new GetMethod(url);
	      }catch(IllegalArgumentException ex){
	    	  Log.logException("url带有不规则字符", ex);
	    	  setStatus(baseURL, ERROR);
	    	  _body.setLength(0);
	    	  return;
	      }
		get.getParams().setParameter(HttpMethodParams.SO_TIMEOUT,100000);
		get.setFollowRedirects(false);
		 int er = 0;
		try{
			get.addRequestHeader("user-agent",useragent);
			 er = http.executeMethod(get);
		     System.out.println("server return code"+er);
		}catch(Exception ex){
			System.out.println("发送图片url到服务器访问失败");
			 try{
	  			    Thread.sleep(120000);
	  			 }catch(InterruptedException e){
	  			   }
	  			 try {
					er = http.executeMethod(get);
				} catch (Exception e) {
					System.out.println("连不上服务器,系统将推出");
					System.exit(0);
				}
		}

		 if (er == 200) {
	    	InputStream is = null;
	          //读取从服务器传过来的页面数据
	    	   try {
	    		   is = get.getResponseBodyAsStream();
	   		} catch (Exception e) {
	   		 System.out.println("读取服务器内容响应时发生错误");
	   		}
	   		byte buffer[] = new byte[20480];
			byte tbuf[] = new byte[204800];
			StringBuffer bf = new StringBuffer();
			try {
				int tl=0;
				while (true) {
					int l = is.read(buffer);
					if (l < 0 || l+tl>204800)
						break;
					for(int jj=0;jj<l;jj++)
					    tbuf[tl+jj]=buffer[jj];
					tl+=l;
				}
				bf.append(new String(tbuf, 0, tl, "ISO8859-1"));
			   _body.setLength(0);
		       _body.append(bf.toString());
		      }catch(IOException ex){
		    	  System.out.println("将服务器的数据转换成String时发生错误");
		      }

		 }//end if(er == 200)
		 //下载图片到硬盘上

		 File outputfile = new File(story,name);
		 try{
			 FileOutputStream fos = new FileOutputStream(outputfile);
	         fos.write(_body.toString().getBytes("ISO8859-1"));
	         fos.close();
			}catch(IOException ex){
				System.out.println("IO存本地发生错误");
			}
	}

	// 返回true表示该url在数据库中已存在
	public boolean URLisExist(String url) {
		ResultSet rs = null;
		boolean b = true;
		int count = 0;
		try {
			_prepGetCount.setString(1, url);
			rs = _prepGetCount.executeQuery();
			rs.next();
			count = rs.getInt("qty");
		} catch (Exception ex) {
			System.out.println("URLisExist发生错误");
			try {
				if (rs != null) {
					rs.close();
				}
			} catch (Exception e1) {
				System.out.println("rs关闭时发生错误");
			}
		}
		if (count < 1)
			b = false;
		return b;
	}

java如果模拟请求重启路由器(网络爬虫常用),还有java如何下载图片

时间: 2024-10-07 07:09:37

java如果模拟请求重启路由器(网络爬虫常用),还有java如何下载图片的相关文章

iOS—网络实用技术OC篇&amp;网络爬虫-使用java语言抓取网络数据

网络爬虫-使用java语言抓取网络数据 前提:熟悉java语法(能看懂就行) 准备阶段:从网页中获取html代码 实战阶段:将对应的html代码使用java语言解析出来,最后保存到plist文件 上一片文章已经介绍我们可以使用两个方式来抓取网络数据实现网络爬虫,并且大致介绍了一下怎么使用正则表达式去实现数据的抓取 由于笔者曾经学过一段时间java和android相关的技术,今天就讲讲怎么使用java去抓取网络数据,关于Python有机会等笔者好好研究一下再来分享,但其实会一种就可以,除非你的需求

iOS开发——网络实用技术OC篇&amp;网络爬虫-使用java语言抓取网络数据

网络爬虫-使用java语言抓取网络数据 前提:熟悉java语法(能看懂就行) 准备阶段:从网页中获取html代码 实战阶段:将对应的html代码使用java语言解析出来,最后保存到plist文件 上一片文章已经介绍我们可以使用两个方式来抓取网络数据实现网络爬虫,并且大致介绍了一下怎么使用正则表达式去实现数据的抓取 由于笔者曾经学过一段时间java和android相关的技术,今天就讲讲怎么使用java去抓取网络数据,关于Python有机会等笔者好好研究一下再来分享,但其实会一种就可以,除非你的需求

Java HttpURLConnection模拟请求Rest接口解决中文乱码问题

转自:http://blog.csdn.net/hwj3747/article/details/53635539 在Java使用HttpURLConnection请求rest接口的时候出现了POST请求出现中文乱码的问题,经过把传入的String通过多种方法进行编码发现都解决不了,如下: String teString=new String("你好".getBytes("ISO-8859-1"),"UTF-8"); 网上HttpURLConnec

Java 基于jsoup jar包的网络爬虫之登录原理

直奔主题: 本篇文章是给有jsoup抓包基础的人看的...... 今天小编给大家写一篇对于jsoup抓包时需要输入验证码的解决方法之一.大神就绕道,嘿嘿~ 任何抓包的基础都是基于Http协议来进行这个抓包行为的,那么,在我们遇到验证码的时候怎么办呢?别着急,继续看 遇到需要验证码的这种情况怎么办: 例如我们要访问www.xxxxx.com这个网站需要你输入验证码,步骤如下: 1)首先我们二话不说,先访问一下www.xxxxx.com这个网址,目的是什么? a.获取到cookies b.为我们下一

一个简单的网络爬虫-从网上爬取美女图片

CrawlerPicture.java 文件 package com.lym.crawlerDemo; import java.io.DataInputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.util.ArrayList; import

爬虫入门-5-2.scrapy框架下载图片

scrapy startproject bmw cd bmw scrapy genspider bmw5 'autohome.com.cn' 第一种方式:不使用ImagePipeline bww5.py: 1 import scrapy 2 from bmw.items import BmwItem 3 4 5 class Bmw5Spider(scrapy.Spider): 6 name = 'bmw5' 7 allowed_domains = ['autohome.com.cn'] 8 st

学 Java 网络爬虫,需要哪些基础知识?

说起网络爬虫,大家想起的估计都是 Python ,诚然爬虫已经是 Python 的代名词之一,相比 Java 来说就要逊色不少.有不少人都不知道 Java 可以做网络爬虫,其实 Java 也能做网络爬虫而且还能做的非常好,在开源社区中有不少优秀的 Java 网络爬虫框架,例如 webmagic .我的第一份正式工作就是使用 webmagic 编写数据采集程序,当时参与了一个舆情分析系统的开发,这里面涉及到了大量网站的新闻采集,我们就使用了 webmagic 进行采集程序的编写,由于当时不知道其设

网络爬虫技术

1.爬虫技术概述 网络爬虫(Web crawler),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本,它们被广泛用于互联网搜索引擎或其他类似网站,可以自动采集所有其能够访问到的页面内容,以获取或更新这些网站的内容和检索方式.从功能上来讲,爬虫一般分为数据采集,处理,储存三个部分.传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件.聚焦爬虫的工作流程较为复杂,需要根据一定的网页分析算法过

crawler4j:轻量级多线程网络爬虫

crawler4j是Java实现的开源网络爬虫.提供了简单易用的接口,可以在几分钟内创建一个多线程网络爬虫. 安装 使用Maven 使用最新版本的crawler4j,在pom.xml中添加如下片段: XHTML 1 2 3 4 5 <dependency> <groupId>edu.uci.ics</groupId> <artifactId>crawler4j</artifactId> <version>4.1</version