热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

java网页解析工具_java网页解析工具包

Jsoup是一个非常好的解析网页的包,用Java开发的,提供了类似DOM,CSS选择器的方式来查找和提取文档中的内容。相关资料如下

Jsoup是一个非常好的解析网页的包,用Java开发的,提供了类似DOM,CSS选择器的方式来查找和提取文档中的内容。

相关资料如下:

今天做了一个Jsoup解析网站的项目,使用Jsoup.connect(url).get()连接某网站时偶尔会出现

java.net.SocketTimeoutException:Read timed out异常。

原因是默认的Socket的延时比较短,而有些网站的响应速度比较慢,

所以会发生超时的情况。

解决方法:

链接的时候设定超时时间即可。

doc = Jsoup.connect(url).timeout(5000).get();

5000表示延时时间设置为5s。

测试代码如下:

1,不设定timeout时:

packagejsoupTest;

importjava.io.IOException;

importorg.jsoup.*;

importorg.jsoup.helper.Validate;

importorg.jsoup.nodes.Document;

importorg.jsoup.nodes.Element;

importorg.jsoup.select.Elements;

publicclassJsoupTest {

publicstaticvoidmain(String[] args)throwsIOException{

String url = "http://www.weather.com.cn/weather/101010400.shtml";

longstart = System.currentTimeMillis();

Document doc=null;

try{

doc = Jsoup.connect(url).get();

}

catch(Exception e){

e.printStackTrace();

}

finally{

System.out.println("Time is:"+(System.currentTimeMillis()-start) +"ms");

}

Elements elem = doc.getElementsByTag("Title");

System.out.println("Title is:"+elem.text());

}

}

package jsoupTest;

import java.io.IOException;

import org.jsoup.*;

import org.jsoup.helper.Validate;

import org.jsoup.nodes.Document;

import org.jsoup.nodes.Element;

import org.jsoup.select.Elements;

public class JsoupTest {

public static void main(String[] args) throws IOException{

String url = "http://www.weather.com.cn/weather/101010400.shtml";

long start = System.currentTimeMillis();

Document doc=null;

try{

doc = Jsoup.connect(url).get();

}

catch(Exception e){

e.printStackTrace();

}

finally{

System.out.println("Time is:"+(System.currentTimeMillis()-start) + "ms");

}

Elements elem = doc.getElementsByTag("Title");

System.out.println("Title is:" +elem.text());

}

}

有时发生超时:

java.net.SocketTimeoutException: Read timed out

at java.net.SocketInputStream.socketRead0(Native Method)

at java.net.SocketInputStream.read(Unknown Source)

at java.net.SocketInputStream.read(Unknown Source)

at java.io.BufferedInputStream.fill(Unknown Source)

at java.io.BufferedInputStream.read1(Unknown Source)

at java.io.BufferedInputStream.read(Unknown Source)

at sun.net.www.http.ChunkedInputStream.fastRead(Unknown Source)

at sun.net.www.http.ChunkedInputStream.read(Unknown Source)

at java.io.FilterInputStream.read(Unknown Source)

at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(Unknown Source)

at java.util.zip.InflaterInputStream.fill(Unknown Source)

at java.util.zip.InflaterInputStream.read(Unknown Source)

at java.util.zip.GZIPInputStream.read(Unknown Source)

at java.io.BufferedInputStream.read1(Unknown Source)

at java.io.BufferedInputStream.read(Unknown Source)

at java.io.FilterInputStream.read(Unknown Source)

at org.jsoup.helper.DataUtil.readToByteBuffer(DataUtil.java:113)

at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:447)

at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:393)

at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:159)

at org.jsoup.helper.HttpConnection.get(HttpConnection.java:148)

at jsoupTest.JsoupTest.main(JsoupTest.java:17)

Time is:3885ms

Exception in thread "main" java.lang.NullPointerException

at jsoupTest.JsoupTest.main(JsoupTest.java:25)

2,设定了则一般不会超时

packagejsoupTest;

importjava.io.IOException;

importorg.jsoup.*;

importorg.jsoup.helper.Validate;

importorg.jsoup.nodes.Document;

importorg.jsoup.nodes.Element;

importorg.jsoup.select.Elements;

publicclassJsoupTest {

publicstaticvoidmain(String[] args)throwsIOException{

String url = "http://www.weather.com.cn/weather/101010400.shtml";

longstart = System.currentTimeMillis();

Document doc=null;

try{

doc = Jsoup.connect(url).timeout(5000).get();

}

catch(Exception e){

e.printStackTrace();

}

finally{

System.out.println("Time is:"+(System.currentTimeMillis()-start) +"ms");

}

Elements elem = doc.getElementsByTag("Title");

System.out.println("Title is:"+elem.text());

}

}

package jsoupTest;

import java.io.IOException;

import org.jsoup.*;

import org.jsoup.helper.Validate;

import org.jsoup.nodes.Document;

import org.jsoup.nodes.Element;

import org.jsoup.select.Elements;

public class JsoupTest {

public static void main(String[] args) throws IOException{

String url = "http://www.weather.com.cn/weather/101010400.shtml";

long start = System.currentTimeMillis();

Document doc=null;

try{

doc = Jsoup.connect(url).timeout(5000).get();

}

catch(Exception e){

e.printStackTrace();

}

finally{

System.out.println("Time is:"+(System.currentTimeMillis()-start) + "ms");

}

Elements elem = doc.getElementsByTag("Title");

System.out.println("Title is:" +elem.text());

}

}

输出为:

Time is:4158ms Title is:顺义天气预报-今日_明日_一周天气预报:16日星期五  多云转晴  11/-4℃



推荐阅读
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • vue使用
    关键词: ... [详细]
  • ubuntu用sqoop将数据从hive导入mysql时,命令: ... [详细]
author-avatar
帅呆了2014_329
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有