JSOUP 超时分析与处理

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)//超时时间url

    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次
        }
    }

 

也能够用如下方式处理spa

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; } 
相关文章
相关标签/搜索