Hỏi về crawl data trong java sử dụng jsoup

Chào mọi người,
Mình đang làm quen với tool crawl data trong java sử dụng jsoup. Mình có viết 1 example để extract data 1 bài hát từ trang zingmp3 về như này:

String url = "https://zingmp3.vn/bai-hat/Khi-Tinh-Yeu-Phai-Mau-Noo-Phuoc-Thinh-Hoa-Mi/ZWAC8FUZ.html/"
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("10.61.76.22", 8888));
Document dc = Jsoup.connect(url).proxy(proxy).userAgent("Chrome/73.0.3683.86")
                        .ignoreContentType(true).maxBodySize(0).get();
System.out.println("Result:  "+ dc);

Kết quả trả về tất cả các thẻ <meta><script> nhưng đoạn content trong body thì trả về trống rỗng. Đây là trang duy nhất mình test gặp vấn đề này, các trang báo mạng hay các trang nhạc tương tự như nhaccuatui, soundcloud đều trả về toàn bộ content website bình thường

Hi vọng có cao nhân nào có thể giải đáp giúp mình vấn đề này với =.= hoặc cho mình xin keyword để xử lý cũng được

1 Like

Đây là kết quả trả về:

<!doctype html>
<html lang="vi">
 <head> 
  <title>Zing MP3 - Nghe tải nhạc chất lượng cao trên desktop, mobile và TV</title> 
  <meta charset="utf-8"> 
  <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> 
  <meta name="theme-color" content="#000000"> 
  <meta name="description" content="Dịch vụ nhạc số với hàng triệu bài hát và MV có bản quyền chất lượng cao, giúp bạn nghe nhạc, tải nhạc, upload và đồng bộ kho nhạc của tôi trên nhiều thiết bị."> 
  <meta name="keywords" content="Zing MP3, nhac so, nhac cua toi, nghe nhac, tai nhac, tim nhac, nhac chat luong cao, upload nhac"> 
  <meta name="robots" content="index, follow"> 
  <meta name="author" content="Zing MP3"> 
  <link rel="canonical" href=""> 
  <link rel="alternate" media="handheld" href="https://m.zingmp3.vn"> 
  <link rel="icon" type="image/png" href="https://zmp3-static.zadn.vn/skins/zmp3-v5.2/images/icon_zing_mp3_60.png"> 
  <meta name="apple-itunes-app" content="app-id=992357547, app-argument=https://itunes.apple.com/vn/app/zing-mp3-lite/id992357547"> 
  <meta name="google-site-verification" content="pzxzIC_2QSKnM2iQQQYKoPWc425970M_UIt2Rw3IKPk"> 
  <meta property="og:title" content="Nghe nhạc hay - Tải nhạc hot - Tìm nhạc vui - Chất lượng cao - Zing MP3"> 
  <meta property="og:description" content="Dịch vụ nhạc số với hàng triệu bài hát và MV có bản quyền chất lượng cao, giúp bạn nghe nhạc, tải nhạc, upload và đồng bộ kho nhạc của tôi trên nhiều thiết bị."> 
  <meta property="og:image" content="//zmp3-static.zadn.vn/skins/common/logo600.png"> 
  <meta property="og:image:url" content="//zmp3-static.zadn.vn/skins/common/logo600.png"> 
  <meta property="og:url" content=""> 
  <meta property="og:site_name" content="Zing MP3"> 
  <meta property="og:type" content="website"> 
  <meta name="al:android:url" property="al:android:url" content="" data-app> 
  <meta name="al:android:package" property="al:android:package" content="com.zing.mp3" data-app> 
  <meta name="al:android:app_name" property="al:android:app_name" content="Zing MP3" data-app> 
  <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> 
  <meta http-equiv="Content-Language" content="vi"> 
  <meta property="fb:app_id" content="1603079626622346"> 
  <meta name="format-detection" content="telephone=no"> 
  <meta name="geo.region" content="VN-SG"> 
  <meta name="geo.placename" content="11"> 
  <meta name="geo.position" content="10.763945;106.656201"> 
  <meta name="ICBM" content="10.763945, 106.656201"> 
  <link rel="manifest" href="https://zmp3-static.zadn.vn/skins/zmp3-v5.2/manifest.json"> 
  <link rel="shortcut icon" href="https://zmp3-static.zadn.vn/skins/zmp3-v5.2/images/icon_zing_mp3_60.png"> 
  <link rel="stylesheet" href="https://zmp3-static.zadn.vn/skins/zmp3-v5.2/fonts/roboto/styles.css" type="text/css"> 
  <link rel="stylesheet" href="https://zmp3-static.zadn.vn/skins/zmp3-v5.2/fonts/v2.2/styles.css" type="text/css"> 
  <script type="text/javascript">
            window.API_URL = "//zingmp3.vn/api";
            window.MOBILE_URL = "https://m.zingmp3.vn";
            window.MP3 = {};
            (function () {
                var isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
                if (isMobile) {
                    var uri = location.pathname + location.search;
                    location.href = window.MOBILE_URL + uri;
                }
                function getCookie(name) {
                    var value = "; " + document.cookie;
                    var parts = value.split("; " + name + "=");
                    if (parts.length == 2)
                        return parts.pop().split(";").shift();
                }
                function addCss(path) {
                    var fileref = document.createElement("link");
                    fileref.setAttribute("rel", "stylesheet");
                    fileref.setAttribute("type", "text/css");
                    fileref.setAttribute("href", path);
                    fileref.setAttribute("id", "ZMP3_THEME");
                    document.getElementsByTagName("head")[0].appendChild(fileref);
                }

                MP3.STYLE_LIGHT = "https://zmp3-static.zadn.vn/skins/zmp3-v5.2/css/styles.9.25.css";
                MP3.STYLE_DARK = "https://zmp3-static.zadn.vn/skins/zmp3-v5.2/css/styles.dark.9.25.css";
            })();
            var img = new Image();
            img.src = "https://mp3.zing.vn/sync-cookies?zmp3_version=V5";
        </script> 
  <link rel="stylesheet" href="https://zmp3-static.zadn.vn/skins/zmp3-v5.2/css/styles.9.25.css" type="text/css" id="ZMP3_THEME"> 
  <link rel="stylesheet" href="https://zmp3-static.zadn.vn/skins/zmp3-v5.2/static/css/main.26bb6509.css" type="text/css"> 
  <link rel="stylesheet" href="https://zjs.zadn.vn/zplayer/releases/v0.1.48/zplayer.min.css" type="text/css"> 
 </head> 
 <body class="w-zingmp3"> 
  <noscript>
    You need to enable JavaScript to run this app. 
  </noscript> 
  <div id="root"></div> 
  <script async src="https://www.googletagservices.com/tag/js/gpt.js"></script> 
  <script>
            var _zap = _zap || [];
            _zap.push(["_setAccount", "ZA-42975759760372"]);
            var googletag = googletag || {};
            googletag.cmd = googletag.cmd || [];

        </script> 
  <script src="https://stc.za.zaloapp.com/v3/za.js"></script> 
  <script type="text/javascript" src="https://sp.zalo.me/plugins/sdk.js"></script> 
  <script type="text/javascript" src="https://stc-sp.zadn.vn/session-sdk/session-sdk.min.js"></script> 
  <script type="text/javascript" src="https://zmp3-static.zadn.vn/skins/zmp3-v5.2/static/zlog/zlog.0.11.js"></script> 
  <script type="text/javascript" src="https://zjs.zadn.vn/zplayer/releases/v0.1.50/zplayer.min.js"></script> 
  <script type="text/javascript" src="https://zjs.zadn.vn/zplayer/plugins/zplayer-karaoke-plugin/11484/app.bundle.min.js"></script> 
  <script type="text/javascript" src="https://zjs.zadn.vn/zplayer/plugins/zplayer-next-playlist-item-plugin/11487/app.bundle.min.js"></script> 
  <script type="text/javascript" src="https://zjs.zadn.vn/zplayer/plugins/zplayer-repeat-plugin/11488/app.bundle.min.js"></script> 
  <script type="text/javascript" src="https://zmp3-static.zadn.vn/skins/zmp3-v5.2/static/js/main.df6b6385.js"></script> 
  <script type="text/javascript" src="//adtima-static.zadn.vn/resource/js/zmp3/web-v5.190401.1.js" defer></script>   
 </body>
</html>

Trang này load bằng javascript, Jsoup sẽ không giải quyết được đâu.

<noscript>
    You need to enable JavaScript to run this app. 
  </noscript> 

Jsoup chỉ là request nên không tải được javascript. Bạn thử dùng selenium xem.

3 Likes

Oh thank bro. Nhưng làm sao để biết trang nào là load bằng js hả bạn??

Thẻ <body> trả về trống như thế là tải bằng Javascript thôi. Có những trang chỉ tải 1 phần (không phải toàn bộ).

2 Likes

thường những trang tải bằng js thì sẽ có API để lấy dữ liệu. Ngồi inspect xem request của nó là gì rồi lấy API mà dùng thôi, có API dùng còn khoẻ hơn đi crawl page hơn nhiều

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?