2017-09-11 2 views
1

Ce que je veux faire est de récupérer simplement le titre d'un youtube page jusqu'à présent, j'accompli cela avec Jsoup en faisantJsoup récupérer youtube titre

title = doc.getElementById("eow-title").text(); 

Mais youtube a changé de mise en page et que tag n'existe plus, j'ai inspecté un youtubehtml code et a découvert qu'ils stockent maintenant le youtube player titre à l'intérieur d'un tag <script>, le problème est que c'est sous la forme suivante et je ne sais pas comment récupérer cela:

var ytplayer = ytplayer || {}; ytplayer.config = {"messages": {"player_fallback": ["Pour la résolution de la vidéo necessario Adobe Flash Player d'un navigateur HTML5. \ u003ca href = \" https: //get.adobe .com/flashplayer/\ "\ u003eScarica l'ultima versione di flash player \ u003c/a \ u003e \ u003Ca href = \"/html5 \ "\ u003eUlteriori informazioni sull'aggiornamento un navigateur un HTML5 \ u003c/a \ u003e "]}", args ": {" vm ":" CAIQABgE "," iv_invideo_url ":" https://www.youtube.com/annotations_invideo?cap_hist=1\u0026video_id=wckFsik_vU8\u0026client=1\u0026ei= JY-2WfHPFIWxcpzcrKAF "," watch_xlb ":" https://s.ytimg.com/yts/xlbbin/watch-strings-it_IT-vflA6zD4C.xlb "," pltype ":" contentugc "," auteur ":" BrawlBRSTMs3 X ", " title ":" Big Blue - Musique F-Zero prolongée », "innertube_api_version": "v1", "eventid": "JY-2WfHPFIWxcpzcrKAF",

Peut-être que je pourrais analyser manuellement le titre avec une regex? Je ne sais pas assez sur regex pour résoudre quelque chose, s'il vous plaît aider.

P.S. J'ai déjà essayé doc.getTitle(); en vain, tout ce que je reçois est "Youtube" au lieu du titre complet.

Résolu par pleft, je devais modifier le code un peu, mais voilà comment je l'ai fait travailler:

doc = Jsoup.connect(getLink()).get(); 
Elements script = doc.select("script"); //to get the script content 
Pattern p = Pattern.compile("\"title\":\"(.+?)\""); // Regex for the getting the string: "title":"blah blah blah" 
Matcher m = p.matcher(script.html()); 
m.find(); 
title = m.group().substring(8); 
+0

FYI: 'doc.getTitle();' récupère le texte entre . Ce qui est apparemment "YouTube". La solution de @pleft est assez solide! – <span class="text-secondary"> <small> <a rel="noopener" target="_blank" href="https://stackoverflow.com/users/3977134/">r3dst0rm</a></span> <span></span> </small> </span> </p> </div> </div> </div> </div> </div> </article> </div> <div class="answer-title"> <span class="text-logo margin-top-sm">A</span> <h2 class="title h4">Répondre</h2> </div> <div class="item-description text-md markdown-body margin-bottom-40 voidso"> <article class="board-top-1 padding-top-10"> <div class="post-col vote-info"> <span class="count">1<i class="fa fa-thumbs-up"></i></span> <i class="fa fa-check fa-2x"></i> </div> <div class="post-offset"> <div class="answer fmt"> <p>Yeap <code class="prettyprint-override">regex</code> fera l'affaire. Pouvez-vous les opérations suivantes:</p> <pre><code class="prettyprint-override">Element script = doc.select("script").first(); //to get the script content Pattern p = Pattern.compile("\"title\":\"(.+?)\""); // Regex for the getting the string: "title":"blah blah blah" Matcher m = p.matcher(script.html()); while(m.find()) { System.out.println(m.group()); } </code></pre> </div> <div class="post-info"> <div class="post-meta row"> <p class="text-secondary col-lg-6"> <span class="source"> <a rel="noopener" target="_blank" href="https://stackoverflow.com/q/46158246">Source</a> </span> </p> <p class="text-secondary col-lg-6"> <span class="float-right date"> <span>2017-09-11 14:33:46</span> <a rel="noopener" target="_blank" href="https://stackoverflow.com/users/3635454/">pleft</a></span> </p> <p class="col-12"></p> <p class="col-12"></p></div> </div> </div> </article> <div> <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-6208739752673518" data-ad-slot="4319274062" data-ad-format="auto" data-full-width-responsive="true"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> <article class="board-top-1 padding-top-10"> <div class="post-col vote-info"> <span class="count">0<i class="fa fa-thumbs-up"></i></span> </div> <div class="post-offset"> <div class="answer fmt"> <p>Vous pouvez essayer de lire la div <code class="prettyprint-override">player</code> de la source, et trouver le <code class="prettyprint-override">title</code> du <code class="prettyprint-override">script</code> intérieur qui <code class="prettyprint-override">div</code>. Voici l'exemple de travail utilisant <code class="prettyprint-override">JSOUP</code>. Cela imprimera "titre": "Titre réel" .So s'il vous plaît mettre à jour selon vos besoins.</p> <pre><code class="prettyprint-override">Document doc = Jsoup.connect("https://www.youtube.com/watch?v=lhs_chrfXfE").timeout(10000).get(); Elements player = doc.select("div#player"); for(Element e:player){ Elements scriptContent = e.getElementsByTag("script"); for (Element paragraph : scriptContent) { System.out.println(paragraph.attr("script")); for (DataNode node : paragraph.dataNodes()) { Pattern pattern = Pattern.compile("\"title\":\"(.+?)\""); Matcher matcher = pattern.matcher(node.getWholeData()); if(matcher.find()) { **//***this is your title***** System.out.println(matcher.group(0)); } } } } } </code></pre> </div> <div class="post-info"> <div class="post-meta row"> <p class="text-secondary col-lg-6"> <span class="source"> <a rel="noopener" target="_blank" href="https://stackoverflow.com/q/46159516">Source</a> </span> </p> <p class="text-secondary col-lg-6"> <span class="float-right date"> <span>2017-09-11 15:43:25</span> <a rel="noopener" target="_blank" href="https://stackoverflow.com/users/1425331/">Jimmy</a></span> </p> <p class="col-12"></p> <p class="col-12"></p></div> </div> </div> </article> </div> <div class="clearfix"> </div> <div> <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <ins class="adsbygoogle" style="display:block" data-ad-format="autorelaxed" data-ad-client="ca-pub-6208739752673518" data-ad-slot="3534119089"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> <div class="padding-top-10"></div> </div> </div> <script type="text/javascript" src="http://img2.voidcc.com/voidso/script/side.js?t=1652515422260"></script> <script type="text/javascript" src="http://img2.voidcc.com/voidso/plugin/highlight/highlight.pack.js"></script> <link href="http://img2.voidcc.com/voidso/plugin/highlight/styles/docco.css" media="screen" rel="stylesheet" type="text/css" /> <script type="text/javascript"> $('pre').each(function(i, e) { hljs.highlightBlock(e, "<span class='indent'> </span>", false) }); </script> <div class="col-lg-3 col-md-4 col-sm-5"> <div id="rightTop"> <div class="row"> <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <!-- VOIDCC问答侧边栏广告 --> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-6208739752673518" data-ad-slot="3862022848" data-ad-format="auto" data-full-width-responsive="true"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> <div class="row sidebar panel panel-default"> <div class="panel-heading font-bold"> Dernière question </div> <div class="m-b-sm m-t-sm clearfix"> <ul class="side_article_list"> <li class="side_article_list_item"> 1. <a href="http://fr.voidcc.com/question/p-vivleizj-bkv.html" target="_blank" title="ma taille de police localstorage ne fonctionnait pas initialement"> ma taille de police localstorage ne fonctionnait pas initialement </a> </li> <li class="side_article_list_item"> 2. <a href="http://fr.voidcc.com/question/p-buqdoqlz-bkv.html" target="_blank" title="PHP comment garder checkbox array vérifié après avoir soumis"> PHP comment garder checkbox array vérifié après avoir soumis </a> </li> <li class="side_article_list_item"> 3. <a href="http://fr.voidcc.com/question/p-xnyexfbq-bkv.html" target="_blank" title="Comment créer champ association auto-référencé"> Comment créer champ association auto-référencé </a> </li> <li class="side_article_list_item"> 4. <a href="http://fr.voidcc.com/question/p-tfzguxgr-bkv.html" target="_blank" title="Erreur JavaCV lors de l'enregistrement d'une image capturée"> Erreur JavaCV lors de l'enregistrement d'une image capturée </a> </li> <li class="side_article_list_item"> 5. <a href="http://fr.voidcc.com/question/p-dqpswkar-bkv.html" target="_blank" title="Regex pour le cas de chameau EBM"> Regex pour le cas de chameau EBM </a> </li> <li class="side_article_list_item"> 6. <a href="http://fr.voidcc.com/question/p-hmimipsm-bkv.html" target="_blank" title="Comment faire un travail ClearInterval clair?"> Comment faire un travail ClearInterval clair? </a> </li> <li class="side_article_list_item"> 7. <a href="http://fr.voidcc.com/question/p-brtfhkyi-bkv.html" target="_blank" title="Comment l'objet est généré dans le code ci-dessous?"> Comment l'objet est généré dans le code ci-dessous? </a> </li> <li class="side_article_list_item"> 8. <a href="http://fr.voidcc.com/question/p-vssjbsyo-bkx.html" target="_blank" title="Comment afficher uniquement la dernière ligne d'un groupe de lignes d'une table dans un rapport ssrs"> Comment afficher uniquement la dernière ligne d'un groupe de lignes d'une table dans un rapport ssrs </a> </li> <li class="side_article_list_item"> 9. <a href="http://fr.voidcc.com/question/p-thouqxal-bkw.html" target="_blank" title="Angular 4 Rupture de liaison bidirectionnelle des données avec EventListener"> Angular 4 Rupture de liaison bidirectionnelle des données avec EventListener </a> </li> <li class="side_article_list_item"> 10. <a href="http://fr.voidcc.com/question/p-qwzcillv-bkw.html" target="_blank" title="Impossible de convertir la photo heic iPhone en jpg"> Impossible de convertir la photo heic iPhone en jpg </a> </li> </ul> </div> </div> </div> <p class="article-nav-bar"></p> <div class="row sidebar article-nav"> <div class="row box_white visible-sm visible-md visible-lg margin-zero"> <div class="top"> <h3 class="title"><i class="glyphicon glyphicon-th-list"></i> Questions connexes</h3> </div> <div class="article-relative-content"> <ul class="side_article_list"> <li class="side_article_list_item">Aucun problème connexe^_^</li> </ul> </div> </div> </div> </div> </div> </div> </div><!-- wrap end--> <!-- footer --> <footer id="footer"> <div class="bg-simple lt"> <div class="container"> <div class="row padder-v m-t"> <div class="col-xs-8"> <ul class="list-inline"> <li><a href="http://fr.voidcc.com/contact">Nous contacter</a></li> <li>© 2020 FR.VOIDCC.COM</li> <li><a rel="nofollow" href="https://beian.miit.gov.cn/" target="_blank">沪ICP备13005482号-13</a></li> <li><script type="text/javascript" src="https://s9.cnzz.com/z_stat.php?id=1280098168&web_id=1280098168"></script></li> <li><a href="http://cn.voidcc.com/" target="_blank" title="程序问答园区">简体中文</a></li> <li><a href="http://hk.voidcc.com/" target="_blank" title="程序問答園區">繁體中文</a></li> <li><a href="http://ru.voidcc.com/" target="_blank" title="поле вопросов и ответов">Русский</a></li> <li><a href="http://de.voidcc.com/" target="_blank" title="Frage - und - antwort - Park">Deutsch</a></li> <li><a href="http://es.voidcc.com/" target="_blank" title="Preguntas y respuestas">Español</a></li> <li><a href="http://hi.voidcc.com/" target="_blank" title="कार्यक्रम प्रश्न और उत्तर पार्क">हिन्दी</a></li> <li><a href="http://it.voidcc.com/" target="_blank" title="IL Programma di chiedere Park">Italiano</a></li> <li><a href="http://ja.voidcc.com/" target="_blank" title="プログラム問答園区">日本語</a></li> <li><a href="http://ko.voidcc.com/" target="_blank" title="프로그램 문답 단지">한국어</a></li> <li><a href="http://pl.voidcc.com/" target="_blank" title="program o park">Polski</a></li> <li><a href="http://tr.voidcc.com/" target="_blank" title="Program soru ve cevap parkı">Türkçe</a></li> <li><a href="http://vi.voidcc.com/" target="_blank" title="Đáp ứng viên">Tiếng Việt</a></li> <li><a href="http://fr.voidcc.com/" target="_blank" title="Programme interrogation Park">Française</a></li> </ul> </div> </div> </div> </div> </div> </footer> <!-- / footer --> <script async src="https://www.googletagmanager.com/gtag/js?id=UA-77509369-5"></script> <script> window.dataLayer = window.dataLayer || []; function gtag() { dataLayer.push(arguments); } gtag('js', new Date()); gtag('config', 'UA-77509369-5'); </script> <script> var _hmt = _hmt || []; (function () { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?67d4731349f0b00136755b80364ce381"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script> </body> </html>