日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用java的html解析器jsoup和jQuery实现一个自动重复抓取任意网站页面指定元素的web应用...

發布時間:2025/5/22 编程问答 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用java的html解析器jsoup和jQuery实现一个自动重复抓取任意网站页面指定元素的web应用... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在線演示??本地下載

如果你曾經開發過內容聚合類網站的話,使用程序動態整合來自不同頁面或者網站內容的功能肯定對于你來說非常熟悉。通常使用java的話,我們都會使用到一些HTML的解析,例如,httpparser,最早gbin1.com的整合搜索就是使用httpparser來抓取Google和Baidu的搜索結果,并且整合呈現給搜索用戶,這也就是GBin1域名的由來。

那么今天呢,我們介紹另外一個超棒的Java的HTML解析器 -?jsoup,這個類庫可以幫助大家實時的處理HTML。提供了非常方便的API來提取和處理數據,最重要的它使用類似jQuery的語法來處理DOM,CSS等,如果你使用過jQuery的話,就知道它處理DOM的強大方便之處。

主要特性

jsoup實現了WHATWG HTML5?的標準,和現代瀏覽器解析DOM的方式一樣。主要功能:

  • 可以從URL,文件或者字符串中抓取和解析HTML
  • 使用DOM的查詢和CSS選擇器來查找和解壓數據
  • 可以處理HTML的屬性,元素和文本
  • 幫助用戶處理遞交的內容,并且防止XSS攻擊
  • 輸出干凈的HTML

基本上jsoup可以幫助你處理各種的HTML問題,并且幫助你驗證非法的tag,創建一個干凈的DOM樹。

實現一個抓取功能

這里我們將實現一個簡單的抓取功能,你只需要指定url,并且指定你需要抓取的特定元素,例如,ID或者class。后臺我們將使用jsoup抓取,前臺使用jQuery美化生成結果。

大家需要注意以下幾點:

  • <a>的相對路徑問題:在你抓取的頁面中的鏈接有可能使用相對路徑,你需要處理成絕對路徑,否則你在本地服務器上無法正常打開鏈接
  • <img> 的相對路徑問題:同上,你同樣也需要處理轉化
  • <img>的尺寸問題:如果你抓取的圖片特別大,你需要使用代碼轉換成本地樣式,這個你也可以選擇使用jQuery在前臺處理
  • 下載jsoup的jar包后,請加入你的classpath路徑,如果你使用jsp,請加入web應用WEB-INF的lib目錄中。

    Java相關代碼如下:

    Document doc = Jsoup.connect("http://www.gbin1.com/portfolio/lastest.html").timeout(0).get();
    Elements items = doc.select(".includeitem");

    以上代碼,我們定義jsoup使用一個url來獲取HTML,這里使用http://www.gbin1.com/portfolio/lastest.html,這個頁面中列出了gbin1最近發布的文章。如果你查看此頁面源代碼,可以看到,每一個文章都在.includeitem這個class中,因此,我們這里使用doc.select方法來選擇對應的class。

    注意我們這里調用timeout(0),這意味著持續的請求url,缺省為2000。即2秒后超時。大家可以看到這里使用了類似jQuery的鏈狀調用,非常方便。

    for (Element item : items) {
    Elements links = item.select("a");
    for(Element link: links){
    link.attr("href",link.attr("abs:href"));
    }

    Elements imgs = item.select("img");
    for(Element img: imgs){
    img.attr("src",img.attr("abs:src"));
    }
    String html = item.html();
    out.println("<li class=\"item\">" + html + "</li>");
    }

    以上代碼中,我們處理每一個查詢到的includeitem元素。查找"a"和"img",將其中的href元素值修改為絕對路徑。

    link.attr("abs:href")

    以上代碼將會得到對應鏈接的絕對路徑,其中屬性為abs:href。同理,可以得到圖片絕對路徑abs:src。

    代碼運行后,我們可以看到修改完的代碼, 將他們放置于li中。

    接下來我們開發控制抓取的javascript頁面:

    在這個頁面的實現中,我們使用setInterval方法間隔指定的時間使用ajax調用以上java開發的代碼,基本代碼如下:

    //Run for first time
    $('#msg').html('請耐心等待, 頁面抓取中 ...').fadeIn(400);
    //$('#content').html('');
    $('#content').load('siteproxy.jsp #result', {url:url, elem:element}, function(){
    $('#msg').html('抓取已完成').delay(1500).fadeOut(400);
    })

    以上代碼非常簡單,我們使用jQuery的load方法來調用siteproxy.jsp,然后取得siteproxy.jsp生成頁面中的#result元素,即抓取內容。如果你不熟悉jQuery的ajax方法,請參考這個系列文章:

    jQuery類庫新手使用指南之AJAX方法- 第一部分

    jQuery類庫新手使用指南之AJAX方法- 第二部分

    jQuery類庫新手使用指南之AJAX方法- 第三部分

    jQuery類庫新手使用指南之AJAX方法- 第四部分

    為了能夠讓代碼指定間隔時間運行抓取,我們將方法放入setinterval中,如下:

    runid = setInterval(
    function getInfo(){
    $('#msg').html('請耐心等待, 頁面抓取中 ...').fadeIn(400);
    //$('#content').html('');
    $('#content').load('siteproxy.jsp #result', {url:url, elem:element}, function(){
    $('#msg').html('抓取已完成').delay(1500).fadeOut(400);
    })
    }, interval*1000);

    通過以上方法,我們可以在用戶觸發抓取后,每隔指定時間觸發抓取動作。

    完整js代碼如下:

    $(document).ready(function(){
    var url, element, interval, runid;
    $('#start').click(function(){
    url = $('#url').val();
    element = $('#element').val();
    interval = $('#interval').val();

    //Run for first time
    $('#msg').html('請耐心等待, 頁面抓取中 ...').fadeIn(400);
    //$('#content').html('');
    $('#content').load('siteproxy.jsp #result', {url:url, elem:element}, function(){
    $('#msg').html('抓取已完成').delay(1500).fadeOut(400);
    })

    runid = setInterval(
    function getInfo(){
    $('#msg').html('請耐心等待, 頁面抓取中 ...').fadeIn(400);
    //$('#content').html('');
    $('#content').load('siteproxy.jsp #result', {url:url, elem:element}, function(){
    $('#msg').html('抓取已完成').delay(1500).fadeOut(400);
    })
    }, interval*1000);
    });

    $('#stop').click(function(){
    $('#msg').html('抓取已暫停').fadeIn(400).delay(1500);
    clearInterval(runid);
    });

    });

    將以上jsp和html文件部署以后,將可以看到如下界面:

    我們需要設置抓取的url和頁面元素,這里缺省是http://www.gbin1.com/portfolio/lastest.html?,元素為.includeitem,點擊開始抓取,可以看到應用抓取如下內容:

    注意這里缺省間隔時間為30秒,30秒后會自動重新抓取內容。

    你可以嘗試抓取weibo.com, 元素.itemt, 間隔時間10秒,能得到如下內容:

    你可以看到和微博首頁的自動刷新內容一樣。

    大家可以把這個工具當做頁面重復刷新工具,可以幫助你監控某個網站某個部分內容,當然,你也可以使用它來動態刷新你的網站,提高你的alexa排名。

    希望大家喜歡這個工具應用,如果你有任何建議和問題,請給我們留言!謝謝!?

    轉載?http://www.gbin1.com/technology/javautilities/20120720jsoupjquerysnatchpage/

    轉載于:https://www.cnblogs.com/chenying99/archive/2013/01/04/2844607.html

    總結

    以上是生活随笔為你收集整理的使用java的html解析器jsoup和jQuery实现一个自动重复抓取任意网站页面指定元素的web应用...的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 九九热在线免费观看 | 国产美女视频 | 风间由美一区二区三区 | 亚洲一区二区三区久久 | 99中文字幕 | 嫩草视频在线 | 国产乱码精品一区二区三区精东 | 青青草原综合久久大伊人精品 | 精品一区二区亚洲 | 96av在线| 中文字幕一区二区在线老色批影视 | 国产91一区二区三区在线精品 | 久久国产精品国产精品 | 日韩一区二区高清视频 | 黄色三级av | 夜夜爽妓女8888视频免费观看 | 性色一区二区三区 | 海角社区在线视频播放观看 | 中文字幕22页 | 丁香午夜 | 久久作爱 | 欧美成人精品一区二区三区在线观看 | 国产成人精品一区二区三区免费 | 黄色片网站免费观看 | 秋霞中文字幕 | 日韩精品一二三四区 | 成人h动漫精品一区二 | 日韩欧美中文字幕一区二区三区 | 亚洲精品成人在线视频 | 中文字幕日韩专区 | 欧美黄色免费视频 | 一本大道伊人av久久综合 | 凹凸精品一区二区三区 | 欧美精品一区二区三区久久 | sm调教羞耻姿势图片 | 成人在线观看18 | 欧美人与性动交xxⅹxx | 中国在线观看视频高清免费 | 午夜小视频网站 | 乳揉みま痴汉4在线播放 | 亚洲一区欧美日韩 | 捆绑凌虐一区二区三区 | 精产国产伦理一二三区 | 日本精品视频在线 | 国产亚洲在线观看 | 久久天天东北熟女毛茸茸 | 伊人国产在线观看 | 成人福利一区二区三区 | 色多多网站 | 日本aa大片 | 蜜桃导航-精品导航 | 噜噜噜色 | 国产色婷婷一区二区三区竹菊影视 | 国产伦精品免费视频 | 国产三级影院 | 国产精久久久 | 99在线国产| 欧美三个黑人玩3p | 葵司有码中文字幕二三区 | 亚洲精品一区二 | 三上悠亚在线一区二区 | 日本成人在线免费视频 | 成人国产片 | 欧美a视频 | 亚洲无吗一区二区三区 | 污版视频在线观看 | 人人做人人爱人人爽 | 色婷婷久久一区二区三区麻豆 | 中文字幕乱码在线观看 | 99色热| 西西人体做爰大胆gogo | 无码乱人伦一区二区亚洲 | 丰满人妻一区二区三区免费视频 | 岛国精品视频 | 樱桃成人精品视频在线播放 | 精品日韩一区二区三区 | 先锋av资源网站 | 国产精品一级片 | 校园春色亚洲激情 | 欧美色图中文字幕 | 99热这里只有精品首页 | 3d动漫精品啪啪一区二区竹菊 | 欧美三级电影在线观看 | 国产视频123 | 玩弄人妻少妇500系列视频 | 超碰2025| 牛牛视频在线观看 | 日本肉体xxxⅹ裸体交 | 亚洲欧美日韩久久精品 | 日韩精品免费一区 | 6080黄色 | 欧美精品一区二区在线播放 | 日韩日韩日韩日韩日韩 | 色超碰 | 精品视频一区二区三区在线观看 | 黄色a毛片| 亚洲一区二区视频网站 | 国产同性人妖ts口直男 | 久久精品国产99久久不卡 |