浅谈jsoup网页抓取技术

标签: jsoup 网页抓取 技术 | 发表时间:2013-10-22 01:14 | 作者:tao_sun
出处:http://blog.csdn.net

        最近初步接触HTML的页面抓取技术,之前曾涉及较多的是XML解析,对于XML解析方法非常的多,使用dom4j是最方便的。HTML解析似乎用途会更多一些,对于HTML的页面解析却也不甚了解。查了一些资料,了解到了jsoup页面解析技术,jsoup是一款java的HTML解析器,可以直接解析某个URL地址、HTML文本内容,它提供了一套非常省力的API,可通过DOM,CSS以及类似于jquery的操作方法来取出和操作数据。主要内容可以参考下面两个站点:

jsoup的中文简明手册如下: http://www.open-open.com/jsoup

jsoup api:  http://jsoup.org/apidocs/


        jsoup的主要类如下图所示。



        使用前需要将jsoup的jar包build path到项目中。jsoup可以从包括字符串、URL地址、以及本地文件来加载HTML文档,并生成Document对象实例。三种解析方式如下:

(1)解析HTML格式的字符串

Document doc = Jsoup.parse("html格式的字符串");

(2)解析URL指向的页面

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

(3)解析本地HTML文档

File input = new File("D:/test.html"); 
Document doc = Jsoup.parse(input,"UTF-8","http://www.csdn.net/"); 


        下面通过一个简单的示例程序看一看jsoup的基本使用方法:

        程序的目的是解析并得到东大研究生院网站的最新动态部分的文本内容。



		String url = "http://seugs.seu.edu.cn/";
		Document doc = Jsoup.connect(url).get();
		//得到页面标题
		String title = doc.title();
		System.out.println(title);
		//得到id为mainright的div标签元素
		Elements top = doc.select("#mainright");
		//得到其中的所有a标签元素
		Elements topNews = top.select("a");
		//输出得到的元素的text文本内容
		for (Element e : topNews) {
			System.out.println(e.text());
		}

可以得到输出内容为:

东南大学研究生院

我校组织研究生参加江苏科学道德与...
第十届全国研究生数模竞赛开始时间...
第十届全国研究生数学建模竞赛报名...
2013年秋学期研究生英语助教培训日...
关于征集第十一届全国博士生学术年...


        可以看到代码非常的简单,并且能够很快的达到目的。jsoup的高效得益于其使用的标签选择器,这种方式有别于一般的网页抽取的开源项目。jsoup选择器的简单用法如下,具体可参见jsoup api。


选择器的基本用法:
tagname  //使用标签名来定位,例如 a
ns:tg //使用命名空间的标签来定位, 例如 fb:name 来查找 <fb:name>元素
#id //使用元素id定位,例如 #logo
.class   //使用元素的class属性定位,例如 .head
[attribute]   //使用元素的的属性进行定位,例如[href]表示检索具有href属性的所有元素
[^attr] //使用元素的属性名前缀进行定位,例如 [^data-] 用来查找 HTML5 的 dataset 属性
[attr=value] //使用属性值进行定位,例如 [width=500] 定位所有 width 属性值为 500 的元素
[attr^=value], [attr$=value], [attr*=value] //这三个语法分别代表,属性以 value 开头、结尾以及包含
[attr~=regex] // 使用正则表达式进行属性值的过滤,例如 img[src~=(?i)\.(png|jpe?g)]
* // 定位所有元素

组合用法:
el#id //定位 id 值某个元素,例如 a#logo -> <a id=logo href= … >
el.class //定位 class 为指定值的元素,例如 div.head -> <div class=head>xxxx</div>
el[attr] //定位所有定义了某属性的元素,例如 a[href]
//以上三个任意组合 例如 a[href]#logo 、a[name].outerlink


用一下方法可以获得元素(Element对象)的数据:

attr(String key)  获得元素的数据
attr(String key, String value) 设置元素数据
attributes() 获得所有属性
id(), className()  classNames() 得到id class的值
text()得到文本值
text(String value) 设置文本值
html() 获取html 
html(String value)设置html
outerHtml() 获得内部html
data()获得数据内容
tag()  得到tag 和 tagName() 得到tagname


其次,还可以对数据进行修改,主要方法如下:

append(String html), prepend(String html)
appendText(String text), prependText(String text)
appendElement(String tagName), prependElement(String tagName)
html(String value)
html()  //可以获取修改完的HTML文档


       最后,谈一些用途,jsoup可以用在很多地方,例如整个不同的新闻源,Android开发中网页数据的抓取。使用jsoup都是一个非常不错的选择。

作者:tao_sun 发表于2013-10-21 17:14:46 原文链接
阅读:96 评论:0 查看评论

相关 [jsoup 网页抓取 技术] 推荐:

浅谈jsoup网页抓取技术

- - CSDN博客互联网推荐文章
        最近初步接触HTML的页面抓取技术,之前曾涉及较多的是XML解析,对于XML解析方法非常的多,使用dom4j是最方便的. HTML解析似乎用途会更多一些,对于HTML的页面解析却也不甚了解. 查了一些资料,了解到了jsoup页面解析技术,jsoup是一款java的HTML解析器,可以直接解析某个URL地址、HTML文本内容,它提供了一套非常省力的API,可通过DOM,CSS以及类似于jquery的操作方法来取出和操作数据.

jsoup select 选择器

- - 编程语言 - ITeye博客
采用CSS或类似jquery 选择器(selector)语法来处理HTML文档中的数据. 利用方法: Element.select(String selector)和 Elements.select(String selector). Jsoup的元素支持类似CSS或(jquery)的选择器语法的查找匹配的元素,可实现功能强大且鲁棒性好的查询.

网页抓取工具

- - Web前端 - ITeye博客
       Webdup能够把您想要浏览的信息(如网页和图片等)预先下载下来,保存在本地硬盘,使您可以从本地进行离线浏览,这样不仅可以大大减少上网时间,降低上网费用,还可以加快浏览速度;并且将来无须上网就可以很方便地查阅这些信息. 不仅如此, Webdup更提供了备份历次下载记录和比较完善的管理功能,使您能够方便地分类保存和管理有价值的下载信息.

JSOUP实现简单爬虫

- - ITeye博客
这个说是简单爬虫 其实连个爬虫也算不上吧 功能太精简了.... 流程很简单: 输入几个初始的网页 然后通过JSOUP获取网页中的a标签的href的值. 接着把新得到的地址放入任务队列中. 实现中的worker是一个单线程的派发器 用于产生Parser. Parser用于完成网页的保存 网页的解析 以及入队列操作.

python爬虫实践之网页抓取

- - CSDN博客推荐文章
python自带了urllib和urllib2模块,以及第三方的requests库来抓取网页,这里我们使用easy_install包管理工具下载requests库,BeautifulSoup库,在CMD命令行下,切换到easy_install的目录,运行命令easy_install 包名称. 安装好requests包之后,我们就可以选择使用urllib,urllib2或requests库来抓取网页了.

使用JSoup解析HTML文件

- - Java译站
HTML是WEB的核心,互联网中你看到的所有页面都是HTML,不管它们是由JavaScript,JSP,PHP,ASP或者是别的什么WEB技术动态生成的. 你的浏览器会去解析HTML并替你去渲染它们. 不过如果你需要自己在Java程序中解析HTML文档并查找某些元素,标签,属性或者检查某个特定的元素是否存在的话,那又该如何呢.

使用 jsoup 对 HTML 文档进行解析和操作

- - 互联网旁观者
Java 程序在解析 HTML 文档时,相信大家都接触过 htmlparser 这个开源项目,我曾经在 IBM DW 上发表过两篇关于 htmlparser 的文章,分别是: 从 HTML 中攫取你所需的信息和 扩展 HTMLParser 对自定义标签的处理能力. 但现在我已经不再使用 htmlparser 了,原因是 htmlparser 很少更新,但最重要的是有了 jsoup.

jsoup使用选择器语法来查找元素

- - ITeye博客
jsoup elements对象支持类似于Jquery的选择器语法,来实现非常强大和灵活的查找功能. Element.select(String selector) 和. Elements.select(String selector) 方法实现:. 这个 select 方法在. Elements对象中都可以使用.

Jsoup-简单优雅的HTML dom解析工具

- - CSDN博客Web前端推荐文章
最近在做一个项目,需要在线从官网上下载选手的图片、名称信息,即做一个简易的网络爬虫,实时抓取最新官网选手数据. 在网上搜了很多开源工具,一开始试的是webharvest,搞了一个上午,终于被其奇怪的配置文件搞怕了,我就是想链接下载一个在线的HTML页面,然后解析其DOM元素,没有更好的工具吗. 终于,在google上找到了Jsoup,其官网( http://jsoup.org/)上的demo神奇的只有两句话.

Jsoup获取全国地区数据(省市县镇村) - liushaofeng.cn

- - 博客园_首页
  最近手头在做一些东西,需要一个全国各地的地域数据,从省市区到县镇乡街道的. 各种度娘,各种谷歌,都没找到一个完整的数据. 最后功夫不负有心人,总算找到一份相对来说比较完整的 数据,但是这里的数据也只是精确到镇级别,没有村一级的数据(后来通过分析数据源我知道了为什么,呵呵),在加上博主提供的有些数据存在冗余,对于有强迫症和追求完美的我,心想着我一定要自己动手去把这部分数据给爬取出来.