网页视频抓取脚本( java通过url读取远程数据并保持到本地的方法介绍)
优采云 发布时间: 2021-10-14 14:22网页视频抓取脚本(
java通过url读取远程数据并保持到本地的方法介绍)
Java通过url读取远程数据并保存到本地实例代码
更新时间:2018-07-03 10:21:26 作者:狐筱筱生
本文通过示例代码向大家介绍java中通过url读取远程数据并保存在本地的方法。本文为您介绍的很详细,具有一定的参考价值。有需要的朋友可以参考
前几天,老太太突然告诉我,她在京东上买了一本电子书。购买后如何查询,只能在网上或自带阅读器查看,很不方便,让我想想办法。
我开始想知道如何。一开始,我直接用Acrobat Reader打开,发现只有一个目录,没有别的,全在页面上。我认为可能可以为正确的内容添加掩码,而我只能使用“密钥”。人们可以过滤它。想要破解别人的编辑器,短时间内肯定不行。网上很多人也想到了用自动化脚本自动给官方读者截图,但是我发现截图并不是逐页截图的。,这是非常令人生畏的。最后,只能通过在线阅读此行来找到方法。
这个方法和网友的差不多。它保存为图片以及如何使用pdf工具将其制作为pdf。
网上看了一下,发现文档真的不错,每页一张图,已经为你准备好了,但是每次只更新当前页面前后几张,其他的都会清零。这时,思路就出来了:
跳转到第 n 页并拉取刷新后的图像路径。将图像路径保存到缓存中(我使用的是 redis)。通过网络工具,将缓存中的所有图片地址下载到本地。这一次,通过pdf处理图像将图像转换为pdf
步骤 1 到 3 需要重复,这可以使用自动工具和脚本来实现。
第四步是写一个控制器,最简单的java接口就可以了。
第 5 步可以通过直接在线服务来实现。
为什么要先在下载中缓存?这涉及到效率和图像去重和过滤的问题,因为每次调整后得到的图像可能是重复的。如果它们存储在redis映射中,它们将被自动删除;这也是为了避免在获取图片路径时,下载过程意外退出以及任务无法正常完成等问题。然后脚本获取路径并将其保存到自己的服务器。唯一的问题可能是跨域问题。原来还是少了几张图片,所以可以体会到使用缓存的好处,可以直接通过代码验证缺失的图片,不需要检查jpg文件,那几位文件,最后手动完成。
这种方式得到的图片唯一的缺陷就是有“京东阅读”字样,而且图片的分辨率不是很高,字体也显得有些邋遢。如果您有强迫症或追求高品质,请使用官方阅读器。个人比较清楚,是文档,不是图片!!!
下面是java通过URL获取网络数据并保存到本地的代码。
public class HttpURLConnectionUtil {
// 通过get请求得到读取器响应数据的数据流
public static InputStream getInputStreamByGet(String url) {
try {
HttpURLConnection conn = (HttpURLConnection) new URL(url)
.openConnection();
conn.setReadTimeout(5000);
conn.setConnectTimeout(5000);
conn.setRequestMethod("GET");
if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
InputStream inputStream = conn.getInputStream();
return inputStream;
}
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
// 将服务器响应的数据流存到本地文件
public static void saveData(InputStream is, File file) {
try (BufferedInputStream bis = new BufferedInputStream(is);
BufferedOutputStream bos = new BufferedOutputStream(
new FileOutputStream(file));) {
byte[] buffer = new byte[1024];
int len = -1;
while ((len = bis.read(buffer)) != -1) {
bos.write(buffer, 0, len);
bos.flush();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
转移:
Set imgNumber = (Set) redisTemplate.opsForHash().keys(MAP_KEY);
imgNumber.stream().forEach(e->{
String url = (String) redisTemplate.opsForHash().get(MAP_KEY,e);
String fileName = e+".jpg";
File file = new File("E:\\pdfͼƬ\\", fileName);
InputStream inputStream = HttpURLConnectionUtil
.getInputStreamByGet(url);
HttpURLConnectionUtil.saveData(inputStream, file);
});
总结
以上是java通过url读取远程数据并保存在本地的示例代码。我希望它会对你有所帮助。如果有什么问题,请给我留言,小编会及时回复您。非常感谢您对脚本之家网站的支持!