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 ...
随机推荐
- 【原创】java socket 和.net socket 通讯 demo
结束符协议"##" import java.io.BufferedReader; import java.io.IOException; import java.io.InputS ...
- sparkStreaming运行yarn,提交任务报错
op.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:302) ...
- css3一道闪光
<style type="text/css"> .overimg{ position: relative; display: block; /* overflow: h ...
- Flask---第一个例子--使用Flask写的【Hello World !】的web程序
from flask import Flask;------->引入Flask插件,pip install Flask; app=Flask(__name__) #变量app是Flask的一个实 ...
- python 操作mongo
1. 导包: import pymongo 2. 建立连接 client = pymongo.MongoClient("127.0.0.1",27017) 3. 获取数据库 db ...
- oracle连接连表查询时,两表的连接字段类型不一致的时候,会导致ora 01722无效数字错误,这时候需要转换
类型不匹配,需要类型转换,函数:to_char()转换成字符,to_num()转换成数字
- C. A Mist of Florescence ----- Codeforces Round #487 (Div. 2)
C. A Mist of Florescence time limit per test 1 second memory limit per test 256 megabytes input stan ...
- Codeforces 1082D Maximum Diameter Graph (贪心构造)
<题目链接> 题目大意:给你一些点的最大度数,让你构造一张图,使得该图的直径最长,输出对应直径以及所有的边. 解题分析:一道比较暴力的构造题,首先,我们贪心的想,要使图的直径最长,肯定是尽 ...
- php手撸轻量级开发(三)composer小白入门
composer介绍 composer是php的一个依赖管理工具,在项目中声明所依赖的外部工具库,会自动安装这些工具库及所依赖的库文件. 对我等初阶工程狮来说,就是拉别人的代码,用别人的库,一个进阶版 ...
- lvs负载均衡概述