本文表述了写爬虫所用到的工具类
package Tool;
import java.util.LinkedList;
/**
* 这是一个url队列,获取到的网站的href都应该放入这个队里之中,为了保证每个链接只访问一次,所以要去重,如果队里已经包含了这个链接
* 就不将其加入队列
* Created by syb on 2016/10/29.
*/
public class UrlQueue {
private LinkedList<String> urlList = new LinkedList<String>();
public LinkedList<String> getUrlList() {
return urlList;
}
public void setUrlList(LinkedList<String> urlList) {
this.urlList = urlList;
}
/**
* 如果队列包含url就不加入队列,否则就加入,这是去重的过程
* @param url
*/
public void enQueue(String url) {
if (!urlList.contains(url)) {
urlList.addLast(url);
}
}
/**
* 删除队头元素,所获得的为一个String类型的字符串;
* @return
*/
public String deQueue() {
return urlList.removeFirst();
}
/**
* 判断队列是否为空
* @return 若为空 则返回true 否则返回false
*/
public boolean isEmpty(){
return urlList.isEmpty();
}
/**
* 获取队列中元素URL的个数
* @return
*/
public int UrlSize(){
return urlList.size();
}
}
这个从链接中读取内容,然后写入到本地文件
package Tool;
import java.io.*;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
/**
* Created by syb on 2016/10/29.
*/
public class WriteFlie {
/**
* 测试所写方法,是否可以读写
*
* @param args
*/
/**
* txtContent是用来存储文件的名字
*/
private static String fileName;
public static String getTxtFileName() {
return fileName;
}
public static void setTxtFileName(String txtFileName) {
WriteFlie.fileName = txtFileName;
}
public static void main(String[] args) {
//region 测试下载文本
//region 测试下载文本
/* String str = "我爱你123";
fileName = "123456789";
String temp = "F:\\爬虫思维导图" + "\\" + fileName + ".txt";
saveTxtFile(temp, str);*/
//endregion
//endregion
//region 测试下载图片
/* String picUrl = "http://search.kuwo.cn/r.s?SONGNAME=%E8%83%A1%E6%AD%8C&ft=music&rformat=json&encoding=utf8&rn=8&callback=song&vipver=MUSIC_8.0.3.1";
fileName = picUrl.substring(picUrl.lastIndexOf("_"), picUrl.length());
// String fileName = "a.jgp"
String filePath = "F:\\爬虫思维导图" + "\\" + fileName+".mp3";
saveFile(picUrl, filePath);*/
//endregion
//region 测试music
/* String url = "http://down.kuwo.cn/mbox/kwmusic2016_web_3.exe";
fileName = url.substring(url.lastIndexOf("_")+1, url.length());
String path = "F:\\爬虫思维导图" + fileName ;
saveFile(url,path);*/
//endregion
}
/**
* 通过一个URL
* 存储文件到本地,需要提供一个路径和存储的内容
* 这是一个存储文本的方法
*
* @param filePath 存储的路径绝对路径,提供时需要存在这个文件
* @param content 需要存储的内容
*/
public static void saveTxtFile(String filePath, String content) {
File file = new File(filePath);
/*if (!file.exists()) {
file.mkdirs();
}*/
byte[] bytes = content.getBytes();
//打开URL
try {
OutputStream outputStream = new FileOutputStream(file, true);
outputStream.write(bytes, 0, bytes.length);
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
//打开URL
//region 读取文件内容
/*
InputStream in = null;
try{
URL txtUrl = new URL(urlTxt);
URLConnection urlConnection = txtUrl.openConnection();
//设置超时
urlConnection.setConnectTimeout(1*1000);
in = urlConnection.getInputStream();
//设置读取字节
byte[] bytes = new byte[1024];
int length ;
File file = new File(filePath);
if (!file.exists()){
file.mkdirs();
}
OutputStream outputStream = new FileOutputStream(file.getPath()+"\\"+fileName);
while ((length = in.read(bytes))!=-1){
outputStream.write(bytes,0,length);
}
// OutputStream os = new FileOutputStream(file.getPath()+"\\"+fileName);
outputStream.close();
in.close();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}*/
//endregion
}
/**
* 这是一个存储图片的方法
*
* @param picUrl 图片的路径链接
* @param
* @param filePath 存储本地的路径
*/
public static void saveFile(String picUrl, String filePath, String picSetNull) {
implement(picUrl, filePath);
}
/**
* 下载音乐
* @param musicUrl 所提供的音乐链接
* @param filePath 需要下载的本地路径
*/
public static void saveFile(String musicUrl, String filePath) {
implement(musicUrl, filePath);
}
/**
* 下载视频
* @param videoUrl 提供的视频链接
* @param filePath 需要下载的本地路径
* @param vidSetNull null
* @param videoSetNull null
*/
public static void saveFile(String videoUrl,String filePath,String vidSetNull,String videoSetNull){
implement(videoUrl,filePath);
}
/**
* 可以从连接中下载任何的东西的方法,比如jpg,exe,mp3,lrc,,mp4等
* @param url 需要提供一个链接
* @param path 一个下载到本地的路径
*/
public static void implement(String url, String path) {
try {
URL mUrl = new URL(url);
URLConnection urlConnection = mUrl.openConnection();
//设置超时
urlConnection.setConnectTimeout(1 * 1000);
//
InputStream in = urlConnection.getInputStream();
OutputStream outputStream = null;
//设置缓冲大小1M
byte[] bytes = new byte[1024 * 1024 * 1];
//创建文件
File file = new File(path);
outputStream = new FileOutputStream(file);
int leng;
while ((leng = in.read(bytes)) != -1) {
outputStream.write(bytes, 0, leng);
}
outputStream.close();
in.close();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
未完待续…