个人比较喜欢靓图,这就是写程序的动机,好了,进入正题:
悠久网上的图片有两种显示模式,一是全图模式,比如(http://tu.uuu9.com/201103/90777.shtml). 这个程序只针对模式一,查看源代码可以发现一系列图片链接,http://image5.uuu9.com/tu/tu//UploadFiles//201103/201103151618323121_S.jpg
http://image5.uuu9.com/tu/tu//UploadFiles//201103/201103151618323592_S.jpg
http://image5.uuu9.com/tu/tu//UploadFiles//201103/201103151618323592_S.jpg
。。。。
把这些链接贴到地址栏,刷,图片就出来了,但是为什么图片那么小呢,别急,把图片路劲里"_S"去掉,再试试,OK,这次是真实的路径了,我们要做的,就是获取这些路劲,但是,咱是程序员,不可能一个一个copy,然后放到迅雷里去,怎么办呢?我们现在要做的是拿到整个网页的源代码,然后将里面的图片URL给扣出来.
java里有一个URL(Uniform Resource Locator)类,理论咱就不说了,直接拿来用.
URL url = new URL("http://tu.uuu9.com/201103/90777.shtml");//构建了一个URL对象,,
InputStream inputStream = url.openConnection().getInputStream();//获取我们需要的字节流
byte[] bytes = new byte[2048];
int c = 0;
StringBuffer stringBuffer = new StringBuffer();
while((c = inputStream.read(bytes))!=-1){
stringBuffer.append(new String(bytes,0,c));//不要简化操作,会吃亏的
}
title = buffer.substring(buffer.indexOf("<title>")+7,buffer.indexOf(" - 美图频道 - 游久网</title>"));//把图片的标题保存下来,后面有用
现在我们就得到了网页的源代码,使用java的正则,可以取出我们需要的路径
Pattern pattern = Pattern.compile("http://image5.uuu9.com/tu/tu//UploadFiles//\\d+/\\d+_S.jpg");//编译正则
Matcher matcher = pattern.matcher(stringBuffer);//将符合正则表达式的文本放入Matcher对象中
先将stringBuffer重新赋值或清空,或者你可以另外构造一个StringBuffer,然后遍历:
stringBuffer = new StringBuffer();
while(matcher.find()){
stringBuffer.append(matcher.group().replace("_S", "") + "\n");
}
ok,这样我们就获得了完全有地址构成的stringBuffer字符串,下面就是下载了,你可以使用迅雷,但是你也可以使用java程序来下载,不说多的,上代码:
File parent = new File("F:\\image\\"+title);
if(!parent.exists())
parent.mkdirs();
else return;
String[] strings = urls.split("\n");
for (String string : strings) {
URL url = new URL(string);//有用到了这个类,但这次可不是获取源代码了
BufferedInputStream in = new BufferedInputStream(url.openStream());//还是获取流
File img = new File(parent,string.substring(string.lastIndexOf("/")));//创建图片文件
img.createNewFile();
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(img));//输出流
byte[] buf = new byte[2048];//缓存
int c;
while ((c = in.read(buf)) != -1) {
out.write(buf, 0, c);//写入文件
}
in.close();
out.close();
}
OK了,这个页面的图片就搞定了,但是,这是我们要的吗,显然不是,为了一个页面,费费这么打劲,显然不值,打开下面这个页面http://tu.uuu9.com/List/List_8.shtml
是不是有好多图,哈哈,这就是我们的目标了,从这个地方我总共down了12129张MM靓图,这要是怎么做的呢,依然是打开源文件,找找,哈,找到
http://tu.uuu9.com/201103/90777.shtml
http://tu.uuu9.com/201103/90776.shtml
。。。。
这正是套图的地址,这次我们要做的,就是找出所有的套图地址,然后,用上面的方法,代码:
StringBuffer urls = new StringBuffer();
File file = new File("f:\\image\\path.txt");
public Test3() throws Exception {
int width = 50;
int height = 100;
int x = (int) ((Toolkit.getDefaultToolkit().getScreenSize().getWidth() - width) / 2);
int y = (int) ((Toolkit.getDefaultToolkit().getScreenSize().getHeight() - height) / 2);
Container container = getContentPane();
JPanel jPanel = new JPanel();
container.add(jPanel);
setBounds(x, y, width, height);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
JButton jButton = new JButton("EXIT");
jPanel.add(jButton);
jButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
FileWriter fileWriter = new FileWriter(file);
fileWriter.write(urls.toString());
fileWriter.close();
System.exit(0);
} catch (IOException e1) {
e1.printStackTrace();
}
}
});
BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
Test2 test2 = new Test2();
String read;
while((read = bufferedReader.readLine())!=null){
urls.append(read+"\n");
}
while(urls.length()!=0){
test2.download(test2.getPath(urls.substring(0, urls.indexOf("\n"))).toString());
urls.delete(0, urls.indexOf("\n")+1);
}
System.exit(0);
这些代码就懒得说了,各位有兴趣的,就自个看去吧,第一遍博文,别喷。。。
不好意思,有段代码中间删了,现在补上来:
package com.test;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test4 {
StringBuffer buffer = new StringBuffer();
FileWriter fileWriter;
public Test4() {
try {
fileWriter = new FileWriter("f:\\path.txt");
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
Test4 test4 = new Test4();
test4.down("http://tu.uuu9.com/List/List_8.shtml");
for (int i = 37; i > 0; i--) {
test4.down("http://tu.uuu9.com/List/List_8_"+i+".shtml");
}
}
void down(String _url){
System.out.println(_url);
URL url;
try {
url = new URL(_url);
InputStream inputStream = url.openConnection().getInputStream();
byte[] bytes = new byte[2048];
int c = 0;
while((c = inputStream.read(bytes))!=-1) {
buffer.append(new String(bytes,0,c));
}
buffer = new StringBuffer(buffer.substring(buffer.indexOf("leftPart"), buffer.lastIndexOf("rightPart")));
Pattern pattern = Pattern.compile("http://tu.uuu9.com/\\d{6}/\\d{5}.shtml");
Matcher matcher = pattern.matcher(buffer);
while(matcher.find()){
fileWriter.append(matcher.group()+"\n");
}
inputStream.close();
fileWriter.flush();
} catch (Exception e) {
e.printStackTrace();
}
}
}
这段代码是用来获取列表路劲,然后保存到文件里的,如果是直接下载,可以将这段代码和上面的最后一步合在一起
分享到:
相关推荐
在Java和JSP开发中,有时我们需要处理在线编辑器上传的内容,这可能涉及到从Web页面中获取远程图片并将其保存到本地服务器。这样的功能对于确保网站的性能和用户体验至关重要,因为将图片本地化可以减少加载时间,...
下面我们将深入探讨如何使用Java根据模板生成带有图片的Word文档。 首先,我们要理解“将doc模版另存为xml格式”的步骤。Microsoft Word的.doc文件实际上是一种二进制格式,但可以通过“另存为”XML文档,将内容...
前几天看到公司一个大神看技术文档,打眼瞟了一下,全是英文的表示直接看看不到。但是大神不一样,人家是硕士哦,英文杠杠的,但是自己心里也想看...java网络编程第四版 java_concurrency_in_practice.pdf Java并发实践
本篇将详细介绍如何在Java中实现这一功能,特别是在遇到需要下载证书的情况。 首先,你需要引入Java的HTTPS相关的库,这通常包含在`javax.net.ssl`包中。Java的`HttpURLConnection`类是处理HTTP和HTTPS请求的基础,...
好消息:CSDN博客下载器v2.0版本增加导出PDF文件功能,方便查看图片与文章。 在无网络环境,也可以看自己的一些文章。当然如果您发现CSDN博客的一些文章值得收藏,你也可以使用本软件轻松的下载到您的电脑。 该版本...
通过以上步骤,我们可以成功地在Java SpringBoot应用中集成PaddleOCR,实现高效、便捷的OCR图片识别服务。这种集成方式不仅充分利用了PaddleOCR的强大功能,也发挥了Java在后端服务上的稳定性和易用性,为开发者提供...
Entry.java这个类的原理是先通过OfficeToPDF.java把文档转成pdf,然后再通过Pdf2Jpg.java这个类把PDF转成JPG或者PNG,想转成什么格式图片在Pdf2Jpg.java这个类当中设置一下,代码经过测试,完全没有问题,如果碰到...
Java开发工具包(JDK)是Java编程的必备工具,包含了编译器(javac)、调试器(jdb)、文档生成器(javadoc)等工具。虽然在描述中没有明确提到JDK,但通常一个完整的Java安装包会包含JDK,这使得开发者可以编写、...
与传统的固件下载方式相比,使用九彩固件下载器下载固件无需安装繁重的第三方网盘客户端和进行复杂的用户登录操作,用户仅需通过这款工具即可轻松实现在线高速下载。这种简便的操作流程大大提升了用户的使用效率,...
7、打开桌面的全能电子地图下载器的快捷方式,软件打开,安装成功。 Windows 7或Windows 8出不来注册码,请右击点用管理员权 限打开,就可以看到注册码了!!! Windows XP不存在这个问题!!!
几乎包含所有java面试题及答案
JAVA API官方文档中文版软件包 java.applet java.awt java.awt.color java.awt.datatransfer java.awt.dnd java.awt.event java.awt.font java.awt.geom java.awt.im java.awt.im.spi java.awt.image ...
这个注解定义了WebSocket服务的URL路径,还可以包含配置器以自定义行为。 4. **生命周期方法** WebSocket端点类通常包含以下生命周期方法: - `onOpen`: 连接打开时调用,可以进行初始化操作。 - `onMessage`: ...
3、可查看下载器“功能介绍”了解下载器具体功能。 功能介绍; 1、基本下载功能; 2、支持多任务多线程同时下载; 3、每个任务的线程数由用户在新建任务时自定义,缺省为5个线程; 4、任务下载过程中可以点击“线程...
11. **Java EE**:如果PDF深入,可能会介绍Java企业版,包括Servlet、JSP、EJB、JDBC等Web开发技术。 12. **设计模式**:介绍常见的设计模式,如单例、工厂、观察者等,提升代码的可读性和可维护性。 此外,这份...
Java(TM) Platform SE Binary 7.70U I586是Oracle公司(原SUN公司)发布的Java标准版(Java Standard Edition)的特定版本,主要用于个人计算机系统。这个版本的Java平台集成了JRE(Java Runtime Environment)和...
《Head First Java》是一本非常受欢迎的Java编程学习书籍,其中文高清版为中国的Java初学者提供了方便的学习资源。这本书以其独特的教学方式,通过丰富的图像、幽默的插图和互动性的设计,帮助读者以轻松有趣的方式...
语言入门 第一章 Java语言的产生及其特点 第二章 Java程序开发与运行环境 第三章 Java程序设计基础 第四章 Java应用程序的基本框架 第五章 Java的类 ...JAVA_Thinking in Java(中文版 由yyc,spirit整理).chm
最近因项目开发的需要,整理了一份用JAVA导出WORD文档,其部署步骤如下: 1、将jacob-1.14.3-x86.dll放在服务器的系统盘(或运行本机的系统):\WINDOWS\system32目录下。 2、将jacob-1.14.3-x86.dll放在JDK 的 bin ...
java jdk 1.6 Linux版本