本文表述了寫爬蟲所用到的工具類
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();
}
}
}
未完待續…