寫爬蟲所用到的工具類--(1)

本文表述了寫爬蟲所用到的工具類

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();
        }
    }

}

未完待續…

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章