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

继上篇的图片篇(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的请求里面有个字段比较怪。

【jsoup爬虫3】用jsoup来实现简单的java爬虫-视频篇_第1张图片


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

【jsoup爬虫3】用jsoup来实现简单的java爬虫-视频篇_第2张图片


很显然,这个就是我们要找的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标签里有个地址,那我们在看看这个地址是不是影片存放的真实地址呢?拿出来在访问一下。


【jsoup爬虫3】用jsoup来实现简单的java爬虫-视频篇_第3张图片

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

附一个简单的代码:

public static void get_html(String headurl , String url) {
		String urls = headurl+url;
		Map map = new HashMap();
		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);
	}


你可能感兴趣的:(JAVA学习)