游久网图片上载器Java版
游久网图片下载器Java版
个人比较喜欢靓图,这就是写程序的动机,好了,进入正题:
悠久网上的图片有两种显示模式,一是全图模式,比如(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();
}
}
}
这段代码是用来获取列表路劲,然后保存到文件里的,如果是直接下载,可以将这段代码和上面的最后一步合在一起
个人比较喜欢靓图,这就是写程序的动机,好了,进入正题:
悠久网上的图片有两种显示模式,一是全图模式,比如(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();
}
}
}
这段代码是用来获取列表路劲,然后保存到文件里的,如果是直接下载,可以将这段代码和上面的最后一步合在一起