我有一个网站,我想从中获取使用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();
}
}
}
我的错误:
线程“main”中的异常java.lang.IndexOutOfBoundsException:索引:0,大小:0 在java.util.ArrayList.rangeCheck(未知来源) at java.util.ArrayList.get(Unknown Source) 在MovMaker.main(MovMaker.java:16)
我想要从中获取数据的页面来源是:Here
我是java和jsoup的新手,如果有人可以给我代码,我会很感激。
此致 Bhuvanesh
答案 0 :(得分: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>
因此,该网址是<script>
代码的一部分。您可以使用正则表达式来获取它:
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;
}
}
}
当然,我的上述解决方案仅适用于此站点和链接。您可能需要调整方法以满足您的需求,但现在应该清楚一般的想法。
答案 1 :(得分:0)
`
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"));
`
希望这适合你。