也不知道为什么喜欢叫爬虫

搞明白原理之后原来就是解析网页代码获取关键字符串

现在的网页有很多解析出来就是JS了,根本不暴露资源地址

依赖一个JSOUP,其他靠百度CV实现

        <!-- https://mvnrepository.com/artifact/org.jsoup/jsoup -->
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.13.1</version>
</dependency>

我爬取的资源页面代码结构是固定的,所以程序设计起来相对简单

查看网页源码之后就可以看这个标签是直接设有id值的,我们知道id属性是不可重复的,所以可以凭借这个属性来准确获取dom元素

得到元素之后再来获取src属性的值,再通过文件下载提供这个资源地址即可获取文件了

<source id="webmSource" src="https://xxx.com/xxx.webm" type="video/webm">

恰好我想得到的资源正好就是这么干的

下面就是代码了:

package cn.dzz;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements; import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection; public class Main { private static String resolving(String urlStr) {
StringBuffer stringBuffer = new StringBuffer(); URL url;
try {
// 通过提供的地址封装成网络对象
url = new URL(urlStr);
// 获取连接 目前的网站都不再允许没有HTTP请求头的请求访问,这里至少要设置一个头信息模拟浏览器访问
// URLConnection urlConnection = url.openConnection(); HttpURLConnection httpURLConnection = ((HttpURLConnection)url.openConnection());
httpURLConnection.addRequestProperty("User-Agent", "Mozilla/4.0"); // 获取输入流对象
InputStream inputStream = httpURLConnection.getInputStream();
// 创建输入流读取对象
InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");
// 创建缓冲流读取对象
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String htmlCodeLine = ""; // 遍历读取缓冲流读取对象的一行,字符串缓冲对象逐行追加,直至结束
while ((htmlCodeLine = bufferedReader.readLine()) != null) {
stringBuffer.append(htmlCodeLine);
}
// 得到完整的页面代码
return stringBuffer.toString(); } catch (Exception e) {
e.printStackTrace();
}
return null;
} private static String getSourceAddress(String completeHtmlCode) {
// 先由JSOUP解析封装成Document对象
Document document = Jsoup.parse(completeHtmlCode);
Elements elementList = document.select("#webmSource");
System.out.println(elementList);
Element element = elementList.get(0);
String src = element.attr("src"); return src;
} private static void downloadWebmVideo(String sourceAddress) {
final String DIR_PATH = "D:/Porn/";
String fileName;
int byteSum = 0;
int byteRead = 0;
try {
URL url = new URL(sourceAddress); fileName = sourceAddress.substring(sourceAddress.lastIndexOf("/") + 1);
System.out.println(fileName); URLConnection urlConnection = url.openConnection();
InputStream inputStream = urlConnection.getInputStream();
FileOutputStream fileOutputStream = new FileOutputStream(DIR_PATH + fileName); byte[] bufferBytes = new byte[(int)Math.pow(2,10)]; //1024 while ((byteRead = inputStream.read(bufferBytes)) != -1) {
byteSum += byteRead;
System.out.println(byteRead);
fileOutputStream.write(bufferBytes, 0, byteRead);
} } catch (Exception e) {
e.printStackTrace();
}
} public static void main(String[] args) {
// downloadWebmVideo(getSourceAddress(resolving(args[0])));
String url = "https://xxx/xxx/";
downloadWebmVideo(getSourceAddress(resolving(url)));
}
}

能够实现文件获取,但是比较简陋

【Java】爬资源案例的更多相关文章

  1. java爬取并下载酷狗TOP500歌曲

    是这样的,之前买车送的垃圾记录仪不能用了,这两天狠心买了好点的记录仪,带导航.音乐.蓝牙.4G等功能,寻思,既然有这些功能就利用起来,用4G听歌有点奢侈,就准备去酷狗下点歌听,居然都是需要办会员才能下 ...

  2. Java爬取并下载酷狗音乐

    本文方法及代码仅供学习,仅供学习. 案例: 下载酷狗TOP500歌曲,代码用到的代码库包含:Jsoup.HttpClient.fastJson等. 正文: 1.分析是否可以获取到TOP500歌单 打开 ...

  3. 必备的 Java 参考资源列表(转)

    包含必备书籍.站点.博客.活动等参考资源的完整清单级别: 初级 Ted Neward, 主管,ThoughtWorks, Neward & Associates 2009 年 3 月 02 日 ...

  4. MinerHtmlThread.java 爬取页面线程

    MinerHtmlThread.java 爬取页面线程 package com.iteye.injavawetrust.miner; import org.apache.commons.logging ...

  5. MinerConfig.java 爬取配置类

    MinerConfig.java 爬取配置类 package com.iteye.injavawetrust.miner; import java.util.List; /** * 爬取配置类 * @ ...

  6. JAVA学习资源分享

    JAVA学习资源分享 最高端的JAVA架构师资源(来自龙果学院 价值¥1399元).JAVA互联网分布式架构(龙果学院 价值¥899元).Spring Boot(2017年最新 包括源码原理分析) + ...

  7. Java学习资源整理(超级全面)

    这里整理一些自己平常搜集的比较好的关于Java的学习资源,主要包括博客站点.书籍.课程等. 了解Java最新资讯 这部分主要是了解与Java相关的动态以及信息,能够拓展我们的视野以及寻找一些好的ide ...

  8. 你不可错过的Java学习资源清单(包含社区、大牛、专栏、书籍等)

    学习Java和其他技术的资源其实非常多,但是我们需要取其精华去其糟粕,选择那些最好的,最适合我们的,同时也要由浅入深,先易后难.基于这样的一个标准,我在这里为大家提供一份Java的学习资源清单. 一: ...

  9. Java爬取网络博客文章

    前言 近期本人在某云上购买了个人域名,本想着以后购买与服务器搭建自己的个人网站,由于需要筹备的太多,暂时先搁置了,想着先借用GitHub Pages搭建一个静态的站,搭建的过程其实也曲折,主要是域名地 ...

  10. Java爬取校内论坛新帖

    Java爬取校内论坛新帖 为了保持消息灵通,博主没事会上上校内论坛看看新帖,作为爬虫爱好者,博主萌生了写个爬虫自动下载的想法. 嗯,这次就选Java. 第三方库准备 Jsoup Jsoup是一款比较好 ...

随机推荐

  1. Vulkan的VkImage和OpenGL的Texture2D互转的3种方法

    Vulkan的纹理和OpenGL的纹理之间共享的解决方案, 因为项目的功能需要同时引入OpenGL和Vulkan,又因为效率的影响必须想办法优化,两者之间需要互相访问互相转换的高效方案. Vulkan ...

  2. The solution of P9194

    10黑寄. problem & blog 考虑到处理加边并不简单,所以我们可以考虑一个黑点 \(p\),连边\((u,p)(p,v)\). 考虑在现在这棵树上连个点在原图中有变相连相当于有一个 ...

  3. 蓝屏rtux64w10.sys

    蓝屏rtux64w10.sys 环境: WIN10 +  Realtek USB RTL8156B 2.5G网卡 表现: 局域网复制时,间隔性速度变为0,多次后,最终蓝屏. 解决方法: 更新驱动. 地 ...

  4. apollo数据库表查询方法-可以通过批量更新mysql数据库-比如批量更新IP地址等

    select `Id`, `AppId`, `Name` from ApolloPortalDB.App; select `NamespaceId`, `Key`, `Value`, `Comment ...

  5. golang 所有关键字的列表及释义归类

    golang 所有关键字的列表及释义归类,截至1.18版本. [控制结构] if  : 条件语句,基于布尔表达式的值决定是否执行特定的代码块. else. else if     : 用在 if 语句 ...

  6. C# .NET 常见DeepCopy 深度拷贝的性能对比

    先上结论 Method Mean Error StdDev Gen0 Gen1 Allocated JSONConvert 2,273.02 ns 43.758 ns 52.091 ns 0.6599 ...

  7. 简单测下C++20 vector array lambda 的常数

    某天打了一下 CF,遇到了一道 https://codeforces.com/contest/1806/problem/E 这里需要卡常. 于是在 C++20(64) 下测出来了一些神奇的结果. 结果 ...

  8. Java常见问题-汇总

    一.面试到底在问些什么东西? 首先你要知道,面试官的提问和你简历上写的内容是紧密联系的,所以你简历上写的技能一定要会. 一般面试包括下面几方面知识类型: Java基础.多线程.IO与NIO.虚拟机.设 ...

  9. javascript的内存(垃圾)回收机制?

    垃圾回收机制 1.js中的内存回收 在js中,垃圾回收器每隔一段时间就会找出那些不再使用的数据,并释放其所占用的内存空间. 以全局变量和局部变量来说,函数中的局部变量在函数执行结束后这些变量已经不再被 ...

  10. 洛谷P2864

    来一发在洛谷的第一篇题解 解析 首先从原点出发回到原点会形成一个环 要计算在环上的路程,首先我们要破环 利用建墙法破环 可以选取任意一个边缘上的树,往上或者往下或者往左往右建立一堵墙'|' 这样利用b ...