写爬虫所用到的工具类--(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();
        }
    }

}

未完待续…

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