当前位置: 首页 > news >正文

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

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

 

相关文章:

  • Ubuntu14.04如何用root账号登陆系统
  • 【翻译】关于Apache Flume FileChannel
  • “小小科技女神”与微软DigiGirlz Day的约会
  • 17-思科防火墙:ASA动态NAT:实验一
  • 字符串拼接的双引号和单引号问题,转义字符
  • 2018年7月7日笔记
  • ffmpeg用法(心得体会还有你见过的用法)
  • Spring Cloud Spring Boot mybatis分布式微服务云架构 返回JSON格式
  • 常用命令参考
  • HongCMS 审计学习
  • Mastering KVM Virtualization:第二章 KVM内部原理
  • .bat文件调用java类的main方法
  • docify文档服务器搭建
  • Shell中重定向lt;lt;EOF注意事项
  • C#笔记
  • [数据结构]链表的实现在PHP中
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • 4. 路由到控制器 - Laravel从零开始教程
  • codis proxy处理流程
  • exif信息对照
  • express如何解决request entity too large问题
  • leetcode46 Permutation 排列组合
  • Lsb图片隐写
  • python3 使用 asyncio 代替线程
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • TCP拥塞控制
  • Transformer-XL: Unleashing the Potential of Attention Models
  • 分享几个不错的工具
  • 深度学习入门:10门免费线上课程推荐
  • #162 (Div. 2)
  • #大学#套接字
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (九)One-Wire总线-DS18B20
  • (万字长文)Spring的核心知识尽揽其中
  • (原)本想说脏话,奈何已放下
  • .gitattributes 文件
  • .gitignore文件—git忽略文件
  • .Net 4.0并行库实用性演练
  • .NET6 命令行启动及发布单个Exe文件
  • .vollhavhelp-V-XXXXXXXX勒索病毒的最新威胁:如何恢复您的数据?
  • @WebServiceClient注解,wsdlLocation 可配置
  • [ 2222 ]http://e.eqxiu.com/s/wJMf15Ku
  • [ vulhub漏洞复现篇 ] JBOSS AS 4.x以下反序列化远程代码执行漏洞CVE-2017-7504
  • [Android Studio] 开发Java 程序
  • [Angular] 笔记 9:list/detail 页面以及@Output
  • [ASP.NET 控件实作 Day7] 设定工具箱的控件图标
  • [BZOJ1040][P2607][ZJOI2008]骑士[树形DP+基环树]
  • [C/C++随笔] char与unsigned char区别
  • [C++]类和对象(中)
  • [C++]运行时,如何确保一个对象是只读的
  • [ERROR]-Error: failure: repodata/filelists.xml.gz from addons: [Errno 256] No more mirrors to try.
  • [ExtJS5学习笔记]第三十节 sencha extjs 5表格gridpanel分组汇总
  • [IMX6DL] CPU频率调节模式以及降频方法
  • [iOS]-UIKit