如果你曾经开发过内容聚合类网站的话,使用程序动态整合来自不同页面或者网站内容的功能肯定对于你来说非常熟悉。通常使用java的话,我们都会使用到一些HTML的解析,例如,httpparser,最早的整合搜索就是使用httpparser来抓取Google和Baidu的搜索结果,并且整合呈现给搜索用户,这也就是GBin1域名的由来。
那么今天呢,我们介绍另外一个超棒的Java的HTML解析器 - jsoup,这个类库可以帮助大家实时的处理HTML。提供了非常方便的API来提取和处理数据,最重要的它使用类似jQuery的语法来处理DOM,CSS等,如果你使用过jQuery的话,就知道它处理DOM的强大方便之处。
jsoup实现了WHATWG HTML5的标准,和现代浏览器解析DOM的方式一样。主要功能:
基本上jsoup可以帮助你处理各种的HTML问题,并且帮助你验证非法的tag,创建一个干净的DOM树。
这里我们将实现一个简单的抓取功能,你只需要指定url,并且指定你需要抓取的特定元素,例如,ID或者class。后台我们将使用jsoup抓取,前台使用jQuery美化生成结果。
1.a的相对径问题:在你抓取的页面中的链接有可能使用相对径,你需要处理成绝对径,否则你在本地服务器上无法正常打开链接
3.img的尺寸问题:如果你抓取的图片特别大,你需要使用代码转换成本地样式,这个你也可以选择使用jQuery在前台处理
以上代码,我们定义jsoup使用一个url来获取HTML,这里使用,这个页面中列出了最近发布的文章。如果你查看此页面源代码,可以看到,每一个文章都在.includeitem这个class中,因此,我们这里使用doc.select方法来选择对应的class。
注意我们这里调用timeout(0),这意味着持续的请求url,缺省为2000。即2秒后超时。大家可以看到这里使用了类似jQuery的链状调用,非常方便。
以上代码中,我们处理每一个查询到的includeitem元素。查找“a”和“img”,将其中的href元素值修改为绝对径。
以上代码将会得到对应链接的绝对径,其中属性为abs:href。同理,可以得到图片绝对径abs:src。
在这个页面的实现中,我们使用setInterval方法间隔指定的时间使用ajax调用以上java开发的代码,基本代码如下:
我们需要设置抓取的url和页面元素,这里缺省是,元素为ludeitem,点击开始抓取,可以看到应用抓取如下内容:
大家可以把这个工具当做页面重复刷新工具,可以帮助你某个网站某个部分内容,当然,你也可以使用它来动态刷新你的网站,提高你的alexa排名。
来源:使用java的html解析器jsoup和jQuery实现一个自动重复抓取任意网站页面指定元素的web应用
推荐:
网友评论 ()条 查看