您的位置:首页 > 编程语言 > Java开发

【jsoup爬虫3】用jsoup来实现简单的java爬虫-视频篇

2017-11-30 14:05 549 查看
继上篇的图片篇(http://blog.csdn.net/suqi356/article/details/78579167)和文字篇(http://blog.csdn.net/suqi356/article/details/78547137)后,我们今天来讲讲视频,这里主要是对视频的地址抓包为主,其次利用jsoup获取地址,然后利用JAVA的IO技术来下载处理视频就可以了。

这里使用的Fiddler,这个在第二讲的图片篇里介绍过,这里还是继续拿CSDN微信公众号推荐的那篇python 3简单入门爬虫(http://mp.weixin.qq.com/s/lGenb6F-r8YyoE2ZO0cVSw)里的视频来讲一下Fiddler

爱奇艺的VIP视频只有会员能看,普通用户只能看前6分钟。比如加勒比海盗5的URL:http://www.iqiyi.com/v_19rr7qhfg0.html#vfrm=19-9-0-1

我们怎么免费看VIP视频呢?一个简单的方法,就是通过旋风视频VIP解析网站。URL:http://api.xfsub.com/

这个网站为我们提供了免费的视频解析,它的通用解析方式是:
http://api.xfsub.com/index.php?url=[播放地址或视频id]

比如

http://api.xfsub.com/index.php?url=http://www.iqiyi.com/v_19rr7qhfg0.html#vfrm=19-9-0-1

我们现在用Fidder来抓包处理:

先访问你需要的解析地址,然后利用Fidder同步抓包

我们可以看到,有用的请求并不多,我们逐条分析。看到一个POST的请求里面有个字段比较怪。



这个POST请求有四个参数,分别为time、key、url、type。记住这个有用的信息,我们在抓包结果中,找一下这个请求,看看这个POST请求做了什么。



很显然,这个就是我们要找的POST请求,我们可以看到POST请求的参数以及返回的json格式的数据。其中url存放的参数如下

xfsub_api\/url.php?key=b84da86e6fff5deedf866c4cbd632eb4&time=1510818645&url=http%3A%2F%2Fwww.iqiyi.com%2Fv_19rr7qhfg0.html&type=iqiyi&xml=1


把里面的转义符改一下,再加上这个网站的头地址,出现如下:

http://api.xfsub.com/xfsub_api/url.php?key=b84da86e6fff5deedf866c4cbd632eb4&time=1510818645&url=http://www.iqiyi.com/v_19rr7qhfg0.html&type=&xml=1


我们来访问一下这个地址,发现



有个video下的file标签里有个地址,那我们在看看这个地址是不是影片存放的真实地址呢?拿出来在访问一下。



发现果真如此,那么这个地址就是真实地址了,我们既然已经分析到真实地址了,那我们的代码就好写了,我们的IO下载也方便了。

附一个简单的代码:

public static void get_html(String headurl , String url) {
String urls = headurl+url;
Map<String, Object> map = new HashMap<String, Object>();
try {
Document doc = Jsoup.connect(urls)
.userAgent("Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; MALC)")
.timeout(999999999)
.header("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")
.header("Accept-Encoding", "gzip, deflate")
.header("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3")
.header("Connection", "keep-alive")
.header("Host", "www.xfsub.com")
.header("Referer", "http://api.xfsub.com/")
//是忽略请求类型
.ignoreContentType(true)
.get();
Elements elements = doc.getElementsByTag("script").eq(5);
for (Element element : elements) {
String[] data = element.data().toString().split("function");
for (String variable : data) {
if (variable.contains("url.php")) {
String[] variables = variable.toString().split("hp\",");
for (String str : variables) {
if (str.contains("time") || str.contains("key")) {
String strs = str.substring(2, str.length()-8);
String[] kvp = strs.split(",");
for(String value: kvp){
String[] values = value.split("\"");
map.put(values[1].trim(), values[3].trim());
}
}
}
}
}
}
String openUrl =
"http://api.xfsub.com/xfsub_api/url.php?key="+map.get("key")+"&time="+map.get("time")+"&url="+url+"&type=&xml=1";
Document docs = Jsoup.connect(openUrl)
.userAgent("Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; MALC)")
.timeout(999999999)
.header("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")
.header("Accept-Encoding", "gzip, deflate")
.header("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3")
.header("Connection", "keep-alive")
.header("Host", "www.xfsub.com")
.header("Referer", urls)
//是忽略请求类型
.ignoreContentType(true)
.get();
System.out.println(docs);

} catch (Exception e) {
e.printStackTrace();
}
}

public static void main(String[] args) throws Exception {
String headurl = "http://api.xfsub.com/xfsub_api/?url=";
String url="http://www.iqiyi.com/v_19rr7qhfg0.html#vfrm=19-9-0-1";
get_html(headurl , url);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  jsoup 抓包 爬虫 视频