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
去发现超时,然后结合自己的处理,这里要说几个问题。
- 请求头信息,在你尝试去爬取对方的内容的时候,需要尽可能的和你在http浏览器请求的请求头一致,注意是请求头,不是相应头。
- 在请求头里务必加上
Connection:close
,有同学可能会问,这个不是相应头里的吗?是的,有的时候你看到在请求头里,有的时候看到在相应头里,而且一般是Connection:keep-alive
,你加上就可以了。下面会讲到。 - 当发现对方拒绝请求的时候,把浏览器里看到的请求头全部加上,甚至 Cookie 也加上,注意换行和空格,需要自己处理下。尽量一行。
- 如果对方网站过弱,请采用单线程爬取,要不然会大量超时,甚至把对方
Kill
了。 - 如果对方有 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;
}
JSOUP 超时分析与处理的更多相关文章
- 网站seo优化--jsoup 批量分析相关网站 标签,描述,关键词.
网站seo优化--jsoup 批量分析相关网站 标签,描述,关键词. 因为自己写了一个磁力搜索网站Btgoogle,准备进行优化一下,需要分析其他的网站的优化情况. Java的Jsoup类库和PHP的 ...
- 一个使用高并发高线程数 Server 使用异步数据库客户端造成的超时问题
现象 今天在做一个项目时, 将 tomcat 的 maxThreads 加大, 加到了 1024, tomcat 提供的服务主要是做一些运算, 然后插入 redis, 查询 redis, 最后将任务返 ...
- ubuntu 更显列表 [Connecting to archive.ubuntu.com (2001:67c:1360:8001::21)] 超时的解决方法
问题描述: 在使用apt-get update 时更行列表,显示[Connecting to archive.ubuntu.com (2001:67c:1360:8001::21)]超时 分析: 我已 ...
- Android中jsoup的混淆规则【转】
Android中jsoup的混淆规则版权声明:转载必须注明本文转自严振杰的博客:http://blog.yanzhenjie.com 说实话这篇文章的标题和内容我觉得很水,所以读者们要是也觉得这篇文章 ...
- 【性能测试实战:jmeter+k8s+微服务+skywalking+efk】系列之:性能监控、分析、调优等
说明: 本文是基于虚拟机演示的,资源有限 skywalking中拓扑图 kubectl get po -A -owide 测试执行:单场景 查询礼品 jmeter -n -t gift.jmx -l ...
- 记一次 nginx 504 Gateway Time-out
今天程序在执行一项excel导出任务的时候 出现了nginx超时的提示 nginx 504 Gateway Time-out 排查过程: 查看该任务 发现内容是一个数据量20000条信息 每条信息有5 ...
- 2PC(Two Phase Commitment Protocol)原理
读TiDB原理部分,知道其分布式事务是参考的Google percolator.而percolator是一种2PC的优化. 分布式事务解决的是什么问题呢? 假设一个场景,一个电商网站,用户在购买商品时 ...
- Android登录client,验证码的获取,网页数据抓取与解析,HttpWatch基本使用
大家好,我是M1ko.在互联网时代的今天,假设一个App不接入互联网.那么这个App一定不会有长时间的生命周期,因此Android网络编程是每个Android开发人员必备的技能.博主是在校大学生,自学 ...
- 记录cocos2d-html5与cocosd-x jsb中遇到的坑
这两天开始用coco2d-html5写游戏, 但最终是发布到手机上, 写的js代码是跑在jsb上的. 在此记录下遇到的坑. 注:cocos2d-x 简称 cx, cocos2d-html5 简称ch ...
随机推荐
- python基础——字符串、编码、格式化
1.三种编码:ascii Unicode utf8 2.字符串和编码数字的两个函数:ord(字符转数字ord(‘A’)=65)和 chr(数字转字符chr(65)=A) 3.bytes存储编码,记住两 ...
- 【原创】python 豆瓣采集
新手今天刚学python~~~ 有点凌乱~勉强看吧 只能算是给新手看看,见谅 简单版本的 豆瓣采集美图~~~~~~ 美女天天有 有木有~~~ python 3.4 sqlite3 BeautifulS ...
- Bean Shell常用内置变量总结
JMeter在它的BeanShell中内置了变量,用户可以通过这些变量与JMeter进行交互,其中主要的变量及其使用方法如下: log:写入信息到jmeber.log文件,使用方法:log.info( ...
- sparkSQL将谓词推入kudu引擎
kudu之所以执行非常快速,可以用来替代HDFS和Hbase等,一个主要原因是,我们可以将普通SQL中的谓词推入kudu引擎,这样kudu查询数据会变的非常快: 将谓词评估推入Kudu引擎可以提高性能 ...
- springmvc+ajax——第二讲(页面缓存)
springmvc+ajax+页面缓存(参考:https://www.cnblogs.com/liuling/archive/2013/07/25/2013-7-25-01.html) 必须设置响应头 ...
- Python class NameError name "xxx" is not defined
Python class NameError name "xxx" is not defined 这是因为在 class 中调用了带双下划线 "__" 的函数对 ...
- gdb调试若干问题
1.若干命令速查 file <文件名>:加载被调试的可执行程序文件.因为一般都在被调试程序所在目录下执行GDB,因而文本名不需要带路径.示例:(gdb) file gdb-sample r ...
- 满血复活--来自世一大的WAR
最需要复习的清单 1.二分 2.图论 3.数论 4.dp
- ECMAScript6 入门 Module
目的:将大程序拆分成互相依赖的小模块文件.CommonJS 和 AMD 两种,前者用于服务器,后者用于浏览器.他俩都是运行时才确定 :ES6 模块的设计思想是尽量的静态化,使得编译时就能确定模块的依赖 ...
- angular7一周学习
ng new xxx 创建一个项目 ng serve --open 执行一个项目 angular 使用socket.io 报错 找到polyfills.ts添加 (window as any).glo ...