Java爬蟲: Java爬蟲可能用得到的一些工具
阿新 • • 發佈:2019-01-01
用到的一些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 + " 下載成功!");
}
}