【问题标题】:unable to fetch the Video source link from this website using JSoup?无法使用 JSoup 从本网站获取视频源链接?
【发布时间】:2016-02-06 21:51:36
【问题描述】:

我有一个网站,我想从其中使用 Jsoup 获取视频链接。但我无法这样做,我的程序会引发错误。有人可以帮帮我吗?

代码如下:

import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class MovMaker {
  public static void main(String[] args) {
    try {
      String url="http://www.tamilyogi.tv/7aum-arivu-2011-hd-720p-tamil-movie-watch-online/";
      Document doc = Jsoup.connect(url).get();
      Element vid = doc.getElementsByTag("video").get(0);
       System.out.println("\nlink: " + vid.attr("src"));
        System.out.println("text: " + vid.text());
      catch (IOException e) {
    e.printStackTrace();
    }
  }
}

我的错误:

线程“主”java.lang.IndexOutOfBoundsException 中的异常:索引:0,大小:0 在 java.util.ArrayList.rangeCheck(未知来源) 在 java.util.ArrayList.get(未知来源) 在 MovMaker.main(MovMaker.java:16)

我要从中获取数据的页面来源是:Here

我完全是 java 和 jsoup 的新手,如果有人能给我代码,我将不胜感激。

问候, 布瓦内什

【问题讨论】:

  • 如果您的问题得到解决,请考虑接受我的回答。如果不是,请具体说明问题所在。

标签: web-scraping jsoup


【解决方案1】:

您给出的链接的直接加载的html中没有<video>标签。该标签是由浏览器中的一些 JavaScript 创建的。由于 JSoup 不运行任何 JavaScript,因此您在这里不走运。

你可以做的是要么使用类似的东西

或者您分析 html 的内容,并分析加载该站点时浏览器中发生的网络流量,以确定您是否可以手动从该信息构建链接。在您的情况下,我快速查看了 html,发现视频标签是在 IFrame 中生成的。在 IFrame 的源代码中,您可以找到这部分:

<script type="text/javascript">  jwplayer("vplayer").setup({
    sources: [{file:"http://cdn7.vidmad.tv/h7todtdxamlbu3tf6rutlihpzoz4di2fcsaje74hlrcqda7qibjmlb4vblxq/v.mp4",label:"720p"},{file:"http://cdn7.vidmad.tv/h7todtdxamlbu3tf6rutlihpzoz4di2fcsaje74hljcqda7qibjjd3opruyq/v.mp4",label:"360p","default": "true"},{file:"http://cdn7.vidmad.tv/h7todtdxamlbu3tf6rutlihpzoz4di2fcsaje74hlbcqda7qibjgcvfli2eq/v.mp4",label:"240p"}],
    image: "http://cdn7.vidmad.tv/i/01/00000/cjwf05thn2vm.jpg",
    duration:"9607",
    width: "100%",
    height: "350",
    aspectratio: "16:9",
    preload: "none",
    androidhls: "true",
    startparam: "start"

    ,tracks: []
    ,skin: "glow",abouttext:"VidMAD", aboutlink:"http://vidmad.tv"
  });

...

</script>

所以 URL 是 &lt;script&gt; 标记的一部分。您可以使用正则表达式来获取它:

Document doc = Jsoup.connect("http://www.tamilyogi.tv/7aum-arivu-2011-hd-720p-tamil-movie-watch-online/")
        .userAgent("Mozilla/5.0")
        .get();

Element iframeEl = doc.select("iframe[src*=embed]").first();
if (iframeEl != null){
    Document frameDoc = Jsoup.connect(iframeEl.attr("src"))
            .userAgent("Mozilla/5.0")
            .get();
    Elements scriptEls = frameDoc.select("script");
    for (Element scriptEl :scriptEls ){
        String html = scriptEl.html();
        Pattern p = Pattern.compile("sources:\\s*\\[\\{file:\"([^\"]+)");
            Matcher m = p.matcher(html);
            if (m.find()){
                String link = m.group(1);
                System.out.println(link);
                break;
            }
    }   
}

当然,我上面的解决方案只适用于这个站点和链接。您可能需要调整方法以满足您的需求,但现在应该清楚总体思路。

【讨论】:

    【解决方案2】:

    `

    Document doc = Jsoup.connect("http://www.tamilyogi.tv/7aum-arivu-2011-hd-720p-tamil-movie-watch-online/")
                .userAgent("Mozilla/5.0")
                .get();
        Element iframeEl = doc.select("iframe").first();
        System.out.println(iframeEl.absUrl("src"));
    

    `

    希望这对你有用。

    【讨论】:

      猜你喜欢
      • 2023-03-03
      • 1970-01-01
      • 1970-01-01
      • 2022-01-02
      • 1970-01-01
      • 2016-09-18
      • 1970-01-01
      • 1970-01-01
      • 2021-03-04
      相关资源
      最近更新 更多