博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JSOUP 超时分析与处理
阅读量:6507 次
发布时间:2019-06-24

本文共 1978 字,大约阅读时间需要 6 分钟。

JSOUP 超时分析与处理

下面说说超时的发现,有可能出现超时的原因,以及超时处理。

1.请求头信息得一致

当你捕获到一个采用JSOUP 去请求超时的链接,我是通过catch 去发现。

try{        doc = Jsoup.connect(url)            .header("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:49.0) Gecko/20100101 Firefox/49.0")            .header("Connection", "close")//如果是这种方式,这里务必带上            .timeout(8000)//超时时间            .get();    } catch (Exception e) {
//可以精确处理timeoutException //超时处理 }

通过try···catch 去发现超时,然后结合自己的处理,这里要说几个问题。

  1. 请求头信息,在你尝试去爬取对方的内容的时候,需要尽可能的和你在http浏览器请求的请求头一致,注意是请求头,不是相应头。
  2. 在请求头里务必加上Connection:close ,有同学可能会问,这个不是相应头里的吗?是的,有的时候你看到在请求头里,有的时候看到在相应头里,而且一般是 Connection:keep-alive ,你加上就可以了。下面会讲到。
  3. 当发现对方拒绝请求的时候,把浏览器里看到的请求头全部加上,甚至  Cookie  也加上,注意换行和空格,需要自己处理下。尽量一行。
  4. 如果对方网站过弱,请采用单线程爬取,要不然会大量超时,甚至把对方Kill 了。
  5. 如果对方有  IP  限制,采用  IP  代理,或者频率放缓慢一点。

2.请求编码一致

其实下一篇我也会单独再说一下因为编码问题影响乱码的问题,可能有人会问了,编码问题,怎么还会影响超时?不是只会影响乱码吗?这里有一个细节,我们超时其实是分两种,一个是请求超时,一个是读取超时,而我的是读取超时。

这个答案我不能肯定的告诉你,但是我测试发现是会影响超时。开始是这样去请求,我还采用多次,请求最频繁超时的地方,我甚至失败重复请求6次。而且每次超时时间设置都是8秒,timeout(8000)//超时时间

try{        doc = Jsoup.connect(url)            .header("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:49.0) Gecko/20100101 Firefox/49.0")            .header("Connection", "close")//如果是这种方式,这里务必带上            .timeout(8000)//超时时间            .get();    } catch (Exception e) {
//可以精确处理timeoutException try{ doc = Jsoup.connect(url) .header("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:49.0) Gecko/20100101 Firefox/49.0") .header("Connection", "close") .timeout(8000) .get(); } catch (Exception e2) { //超时处理,超时2次 } }

 

也可以用以下方式处理

doc = getDate(url);public static Document getDate(String url) {Document doc = null; boolean flag = true; while (flag) { try { doc = Jsoup.connect(url).timeout(5000).userAgent("Mozilla/4.0 (compatible; MSIE 9.0; Windows NT 5.0)").get(); flag = false; } catch (IOException e) { // e.printStackTrace(); } } return doc; }

 

转载地址:http://yawfo.baihongyu.com/

你可能感兴趣的文章
mvc学习地址
查看>>
masonry 基本用法
查看>>
Word产品需求文档,已经过时了【转】
查看>>
dtoj#4299. 图(graph)
查看>>
zabbix-3.4 触发器
查看>>
换用代理IP的Webbrowser方法
查看>>
【视频编解码·学习笔记】7. 熵编码算法:基础知识 & 哈夫曼编码
查看>>
spark集群安装部署
查看>>
MySql 查询表字段数
查看>>
mariadb 内存占用优化
查看>>
Centos7安装编译安装zabbix2.219及mariadb-5.5.46
查看>>
怎么获得combobox的valueField值
查看>>
浅谈网络协议(四) IP的由来--DHCP与PXE
查看>>
jre与jdk的区别
查看>>
全景图的种类
查看>>
git 维护
查看>>
jfinal框架下使用c3P0连接池连接sql server 2008
查看>>
Jfinal Generator 不需要生成带某个前缀的表名数组的方法
查看>>
struts2中使用标签操作静态方法等
查看>>
熬夜写了一个小游戏,向SpaceX聊表敬意
查看>>