java网络爬虫连接超时解决实例代码

本文研究的主要是java网络爬虫连接超时的问题,具体如下。

在网络爬虫中,经常会遇到如下报错。即连接超时。针对此问题,一般解决思路为:将连接时间、请求时间设置长一下。如果出现连接超时的情况,则在重新请求【设置重新请求次数】。

Exception in thread "main" java.net.ConnectException: Connection timed out: connect

下面的代码便是使用httpclient解决连接超时的样例程序。直接上程序。

package daili;
import java.io.IOException;
import java.net.URI;
import org.apache.http.HttpRequest;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.params.CookiePolicy;
import org.apache.http.client.protocol.ClientContext;
import org.apache.http.impl.client.BasicCookieStore;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.client.DefaultHttpRequestRetryHandler;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.cookie.BasicClientCookie2;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.apache.http.protocol.BasicHttpContext;
import org.apache.http.protocol.ExecutionContext;
import org.apache.http.protocol.HttpContext;
import org.apache.http.util.EntityUtils;
/*
 * author:合肥工业大学 管院学院 钱洋
 *1563178220@qq.com
*/
public class Test1 {
	public static void main(String[] args) throws ClientProtocolException, IOException, InterruptedException {
		getRawHTML("http://club.autohome.com.cn/bbs/forum-c-2098-1.html#pvareaid=103447");
	}
	public static String getRawHTML ( String url ) throws ClientProtocolException, IOException, InterruptedException{
		//初始化
		DefaultHttpClient httpclient = new DefaultHttpClient();
		httpclient.getParams().setParameter("http.protocol.cookie-policy",
		        CookiePolicy.BROWSER_COMPATIBILITY);
		//设置参数
		HttpParams params = httpclient.getParams();
		//连接时间
		HttpConnectionParams.setConnectionTimeout(params, 6000);
		HttpConnectionParams.setSoTimeout(params, 6000*20);
		//超时重新请求次数
		DefaultHttpRequestRetryHandler dhr = new DefaultHttpRequestRetryHandler(5,true);
		HttpContext localContext = new BasicHttpContext();
		HttpRequest request2 = (HttpRequest) localContext.getAttribute(
		        ExecutionContext.HTTP_REQUEST);
		httpclient.setHttpRequestRetryHandler(dhr);
		BasicCookieStore cookieStore = new BasicCookieStore();
		BasicClientCookie2 cookie = new BasicClientCookie2("Content-Type","text/html;charset=UTF-8");
		BasicClientCookie2 cookie1 = new BasicClientCookie2("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36");
		cookieStore.addCookie(cookie);
		cookieStore.addCookie(cookie1);
		localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
		HttpGet request = new HttpGet();
		request.setURI(URI.create(url));
		HttpResponse response = null;
		String rawHTML = "";
		response = httpclient.execute(request,localContext);
		int StatusCode = response.getStatusLine().getStatusCode();
		//获取响应状态码
		System.out.println(StatusCode);
		if(StatusCode == 200){
			//状态码200表示响应成功
			//获取实体内容
			rawHTML = EntityUtils.toString (response.getEntity());
			System.out.println(rawHTML);
			//输出实体内容
			EntityUtils.consume(response.getEntity());
			//消耗实体
		} else {
			//关闭HttpEntity的流实体
			EntityUtils.consume(response.getEntity());
			//消耗实体
			Thread.sleep(20*60*1000);
			//如果报错先休息30分钟
		}
		httpclient.close();
		System.out.println(rawHTML);
		return rawHTML;
	}
}

结果:

总结

以上就是本文关于java网络爬虫连接超时解决实例代码的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

您可能感兴趣的文章:

  • 基于Vert.x和RxJava 2构建通用的爬虫框架的示例
  • 基于RxJava2实现的简单图片爬虫的方法
  • Java爬虫实现爬取京东上的手机搜索页面 HttpCliient+Jsoup
  • java实现一个简单的网络爬虫代码示例
  • 分享一个简单的java爬虫框架
  • JAVA超级简单的爬虫实例讲解
  • hadoop中实现java网络爬虫(示例讲解)
  • JAVA爬虫实现自动登录淘宝
(0)

相关推荐

  • JAVA超级简单的爬虫实例讲解

    爬取整个页面的数据,并进行有效的提取信息,注释都有就不废话了: public class Reptile { public static void main(String[] args) { String url1=""; //传入你所要爬取的页面地址 InputStream is=null; //创建输入流用于读取流 BufferedReader br=null; //包装流,加快读取速度 StringBuffer html=new StringBuffer(); //用来保存读取页

  • 分享一个简单的java爬虫框架

    反复给网站编写不同的爬虫逻辑太麻烦了,自己实现了一个小框架 可以自定义的部分有: 请求方式(默认为Getuser-agent为谷歌浏览器的设置),可以通过实现RequestSet接口来自定义请求方式 储存方式(默认储存在f盘的html文件夹下),可以通过SaveUtil接口来自定义保存方式 需要保存的资源(默认为整个html页面) 筛选方式(默认所有url都符合要求),通过实现ResourseChooser接口来自定义需要保存的url和资源页面 实现的部分有: html页面的下载方式,通过Htt

  • java实现一个简单的网络爬虫代码示例

    目前市面上流行的爬虫以python居多,简单了解之后,觉得简单的一些页面的爬虫,主要就是去解析目标页面(html).那么就在想,java有没有用户方便解析html页面呢?找到了一个jsoup包,一个非常方便解析html的工具呢. 使用方式也非常简单,引入jar包: <dependency> <groupId>org.jsoup</groupId> <artifactId>jsoup</artifactId> <version>1.8.

  • 基于RxJava2实现的简单图片爬虫的方法

    今年十月份以来,跟朋友尝试导入一些图片到tensorflow来生成模型,这就需要大量的图片.刚开始我只写了一个简单的HttpClient程序来抓取图片,后来为了通用性索性写一个简单的图片爬虫程序.它可以用于抓取单张图片.多张图片.某个网页下的所有图片.多个网页下的所有图片. github地址:https://github.com/fengzhizi715/PicCrawler 这个爬虫使用了HttpClient.RxJava2以及Java 8的一些特性.它支持一些简单的定制,比如定制User-A

  • hadoop中实现java网络爬虫(示例讲解)

    这一篇网络爬虫的实现就要联系上大数据了.在前两篇java实现网络爬虫和heritrix实现网络爬虫的基础上,这一次是要完整的做一次数据的收集.数据上传.数据分析.数据结果读取.数据可视化. 需要用到 Cygwin:一个在windows平台上运行的类UNIX模拟环境,直接网上搜索下载,并且安装: Hadoop:配置Hadoop环境,实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS,用来将收集的数据直接上传保存到HDFS,然后用MapReduce

  • Java爬虫实现爬取京东上的手机搜索页面 HttpCliient+Jsoup

    1.需求及配置 需求:爬取京东手机搜索页面的信息,记录各手机的名称,价格,评论数等,形成一个可用于实际分析的数据表格. 使用Maven项目,log4j记录日志,日志仅导出到控制台. Maven依赖如下(pom.xml) <dependencies> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId>

  • JAVA爬虫实现自动登录淘宝

    目的 想通过JAVA代码实现淘宝网的自动登录,通过获取设置的登录信息自动填写并提交.目前这个代码是小编测试过的,可以通过,后期不知道淘宝会不会有相应的封堵策略. 代码分享: package util; import org.openqa.selenium.By; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.fi

  • 基于Vert.x和RxJava 2构建通用的爬虫框架的示例

    最近由于业务需要监控一些数据,虽然市面上有很多优秀的爬虫框架,但是我仍然打算从头开始实现一套完整的爬虫框架. 在技术选型上,我没有选择Spring来搭建项目,而是选择了更轻量级的Vert.x.一方面感觉Spring太重了,而Vert.x是一个基于JVM.轻量级.高性能的框架.它基于事件和异步,依托于全异步Java服务器Netty,并扩展了很多其他特性. github地址:https://github.com/fengzhizi715/NetDiscovery 一. 爬虫框架的功能 爬虫框架包含爬

  • java网络爬虫连接超时解决实例代码

    本文研究的主要是java网络爬虫连接超时的问题,具体如下. 在网络爬虫中,经常会遇到如下报错.即连接超时.针对此问题,一般解决思路为:将连接时间.请求时间设置长一下.如果出现连接超时的情况,则在重新请求[设置重新请求次数]. Exception in thread "main" java.net.ConnectException: Connection timed out: connect 下面的代码便是使用httpclient解决连接超时的样例程序.直接上程序. package da

  • Python实现爬虫从网络上下载文档的实例代码

    最近在学习Python,自然接触到了爬虫,写了一个小型爬虫软件,从初始Url解析网页,使用正则获取待爬取链接,使用beautifulsoup解析获取文本,使用自己写的输出器可以将文本输出保存,具体代码如下: Spider_main.py # coding:utf8 from baike_spider import url_manager, html_downloader, html_parser, html_outputer class SpiderMain(object): def __ini

  • 基于ORA-12170 TNS 连接超时解决办法详解

    1.开始----程序-----oracle------配置和移植工具-----Net Manager----本地----服务命名---ora11(这个是我的专用服务器) 把右边下面的主机名改成192.168.1.102 2.开始----程序-----oracle------配置和移植工具-----Net Manager----本地----监听程序---同样把右边下面的主机名改成192.168.1.102 重新连接又报了另一个错误 ora-12541:TNS:没有监听器1.cmd---servic

  • Java网络编程之TCP通信完整代码示例

    一.概述 Socket类是Java执行客户端TCP操作的基础类,这个类本身使用代码通过主机操作系统的本地TCP栈进行通信.Socket类的方法会建立和销毁连接,设置各种Socket选项. ServerSocket类是Java执行服务器端操作的基础类,该类运行于服务器,监听入站TCP连接,每个socket服务器监听服务器的某个端口,当远程主机的客户端尝试连接此端口时,服务器就被唤醒,并返回一个表示两台主机之间socket的正常Socket对象. 二.什么是TCP? TCP是一种面向连接的.可靠的.

  • Linux下使用pip安装SpeechRecognition连接超时解决办法

    Linux下使用pip安装SpeechRecognition 经常会看到代码import speechrecognition as sr这类的语句,查阅相关资料需要利用pip来安装SpeecchRecognition.首先在Linux下安装pip,然后通过命令pip install SpeechRecognition进行安装.总是会出现一大段红字(大致意思连接第三方库网络超时),红字内容大致如下: 网上查了好多资料,有的说是改变一下字母大小写然后在还原以前的就可以,测试了一下无效!!!找了好久最

  • Android网络状态实时监听实例代码(二)

    上篇文章给大家介绍了Android 网络状态实时监听代码实例(一),感兴趣的朋友可以点击了解详情,本文接着给大家介绍android网络状态监听相关知识,具体内容如下所示: 在开发android应用时,涉及到要进行网络访问,时常需要进行网络状态的检查,以提供给用户必要的提醒.一般可以通过ConnectivityManager来完成该工作. ConnectivityManager有四个主要任务: 1.监听手机网络状态(包括GPRS,WIFI, UMTS等) 2.手机状态发生改变时,发送广播 3.当一

  • Java Socket编程服务器响应客户端实例代码

    通过输入流来读取客户端信息,相应的时候通过输出流来实现. 服务端类的代码: import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintWriter; import java.net.ServerSocket; impo

  • java date类与string类实例代码分享

    Date类用来指定日期和时间,其构造函数及常用方法如下: publicDate() 从当前时间构造日期时间对象. publicStringtoString() 转换成字符串. publiclonggetTime() 返回自新世纪以来的毫秒数,可以用于时间计算. [例3.10]测试执行循环花费的时间(数量级为毫秒),具体时间情况如图3.9所示.源程序代码如下: //程序文件名为UseDate.java import java.util.Date; public class UseDate { pu

  • Java 网络爬虫新手入门详解

    这是 Java 网络爬虫系列文章的第一篇,如果你还不知道 Java 网络爬虫系列文章,请参看Java 网络爬虫基础知识入门解析.第一篇是关于 Java 网络爬虫入门内容,在该篇中我们以采集虎扑列表新闻的新闻标题和详情页为例,需要提取的内容如下图所示: 我们需要提取图中圈出来的文字及其对应的链接,在提取的过程中,我们会使用两种方式来提取,一种是 Jsoup 的方式,另一种是 httpclient + 正则表达式的方式,这也是 Java 网络爬虫常用的两种方式,你不了解这两种方式没关系,后面会有相应

随机推荐