1. 程式人生 > >Java爬蟲: Java爬蟲可能用得到的一些工具

Java爬蟲: Java爬蟲可能用得到的一些工具

用到的一些Maven依賴:

<dependencies>
    <!--Jsoup依賴-->
    <dependency>
        <groupId>org.jsoup</groupId>
        <artifactId>jsoup</artifactId>
        <version>1.10.2</version>
    </dependency>

    <!--mybatis依賴-->
    <dependency>
<groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.1</version> </dependency> <!--mysql依賴--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId
>
<version>5.1.38</version> </dependency> <!--阿里巴巴的fastjson依賴--> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.7</version> </dependency> </dependencies
>

Java爬蟲可能用得到的一些工具

package pri.liyang.util;

import org.jsoup.Jsoup;

import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;

/**
 * Java爬蟲可能用得到的一些工具
 * Author:李小白
 */
public class JavaSpiderUtil {

    /**
     * 根據給定的URL,獲取相應的HTML內容,用於正則爬取資料
     * */
    public static String getHtmlByUrl(String requestUrl) throws Exception{
        URL url = new URL(requestUrl);
        //通過Jsoup獲取html內容,設定超時時間30秒
        String html = Jsoup.parse(url, 30*1000).toString();
        return html;
    }

    /**
     * 根據URL,傳送GET請求,獲取JSON資料(ResponseBody)
     * 適用於前後端分離的情況,返回的是ResponseBody的JSon資料
     * */
    public static String getResponseBodyByUrlAndMethodGet(String requestUrl) throws Exception{
        String response="";
        StringBuffer buffer = new StringBuffer();
        try{
            //例項化URL物件,通過String requestURL
            URL url = new URL(requestUrl);
            //呼叫URL的openConnection(),獲得HttpURLConnection例項
            HttpURLConnection urlCon= (HttpURLConnection)url.openConnection();
            //狀態碼是200,則連線成功
            if(200==urlCon.getResponseCode()){
                //獲得該HttpURLConnection的輸入流
                InputStream is = urlCon.getInputStream();
                InputStreamReader isr = new InputStreamReader(is,"utf-8");
                BufferedReader br = new BufferedReader(isr);

                String str = null;
                while((str = br.readLine())!=null){
                    //讀取該url的ResponseBody(通過輸入流轉換的BufferedReader)
                    buffer.append(str);
                }
                //根據開啟順序,倒序關流
                br.close();
                isr.close();
                is.close();
                //獲得ResponseBody的Json資料
                response = buffer.toString();
            }
        }catch(IOException e){
            e.printStackTrace();
        }
        return response;
    }

    /**
     * 判斷給定URL是否有效
     * */
    public static Boolean isValidURL(String requestURL){
        String html = null;
        try{
            html = URLTool.getHtmlByUrl(requestURL);
            System.out.println("網址有效:" + requestURL);
            return true;
        }catch(Exception e){
            System.out.println("網址無法使用,請檢查其有效性:" + requestURL);
            return false;
        }
    }

    /**
     * 根據URL下載圖片
     * */
    public static void download(String urlString, String filename,String savePath) throws Exception {
        // 構造URL
        URL url = new URL(urlString);
        // 開啟連線
        URLConnection con = url.openConnection();
        //設定請求超時為5s
        con.setConnectTimeout(5*1000);
        // 輸入流
        InputStream is = con.getInputStream();

        // 1K的資料緩衝
        byte[] bs = new byte[1024];
        // 讀取到的資料長度
        int len;
        // 輸出的檔案流
        File sf=new File(savePath);
        if(!sf.exists()){
            sf.mkdirs();
        }
        OutputStream os = new FileOutputStream(sf.getPath()+"\\"+filename);
        // 開始讀取
        while ((len = is.read(bs)) != -1) {
            os.write(bs, 0, len);
        }
        // 完畢,關閉所有連結
        os.close();
        is.close();

        System.out.println(filename + "   下載成功!");
    }

}