Java編寫爬蟲,並儲存本地檔案,未涉及圖片,視訊的儲存,只是儲存文字內容
Java Jsoup jar包編寫爬蟲
這個案例內容很簡單,只是設計文字的爬取,未涉及到圖片儲存與視訊儲存。記錄下來只是方便自己的一個記錄、同時希望給向我這樣第一次接觸爬蟲的朋友一個參考!!個人覺得分為兩步走!當然,我寫了三個檔案,內容如下:
一、開始方法 ShowMain類 import java.io.IOException; //匯入的包
public class ShowMain { public static void main(String[] args) { try { CrawlText.getText(true, true, “https://www.8btc.com/news”); //爬取的網址 } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
二、獲取此網頁中的所有連線
import java.io.IOException; import java.util.ArrayList; import java.util.List;
import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; //以上內容未匯入的包、起中jsoup包可以在maven依賴查詢中搜索 //maven以來查詢網址為:https://mvnrepository.com/ 在搜尋框搜尋點選第一個進去下載就可以了 public class CrawlText { public static void getText(boolean autoDownloadFile, boolean Multithreading, String Url) throws IOException { String rule = “abs:href”;
List<String> urlList = new ArrayList<String>(); Document document = Jsoup.connect(Url).timeout(4000).ignoreContentType(true).userAgent("Mozilla\" to \"Mozilla/5.0 (Windows NT 10.0; WOW64; rv:50.0)").get(); Elements urlNode = document.select("a[href]"); //獲取網址:https://www.8btc.com/news 中所有a標籤,並且a標籤中有href的所有標籤欄位。這個獲取的包括標籤在內,我們還需要賽選 for (Element element : urlNode) { //迴圈獲取下來的所有標籤 String href = element.attr("href"); //將所有標籤中的href內容獲取並保留為String型別的 href if (href != null && href.startsWith("/article/")) { //判斷 .startsWith()//方法為獲取字元為:/article/為字首的所有欄位 urlList.add(element.attr(rule)); //將所有字首為/article/的標籤內容加網址首頁的url儲存在list集合中 } } CrawTextThread crawTextThread = new CrawTextThread(urlList); crawTextThread.start(); //開始,呼叫的是CrawTextThread類中的run方法 }
}
三、對獲取的連線中的網路做爬取操作,並儲存為本地檔案
import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.RandomAccessFile; import java.util.List;
import org.jsoup.Jsoup; import org.jsoup.nodes.Document;
public class CrawTextThread extends Thread { List UrlList;
public CrawTextThread(List<String> urlList) {
this.UrlList = urlList;
}
String rule = "";
String rule_title = "h1";
String rule_content = "content";
public static String PATH = "D:\\JSOUP\\";
/**
* 建立檔案
*
* @param fileName
* @return
*/
public static void createFile(File fileName) throws Exception {
try {
if (!fileName.exists()) { // 判斷檔案或資料夾是否存在。如果存在,就不建立檔案,如果不存在,就建立一個檔案
fileName.createNewFile();
}
} catch (Exception e) {
e.printStackTrace();
}
}
//將獲取的內容輸入到字尾為.txt的文字中
public static void writeTxtFile(String content, File fileName) throws Exception {
RandomAccessFile mm = null; // 隨機訪問檔案的讀取與寫入
FileOutputStream o = null; // 輸出流,寫出資料
try {
o = new FileOutputStream(fileName); // 對檔案fileName進行寫出
o.write(content.getBytes("UTF-8")); // 寫出編碼格式為utf-8
o.close(); // 關閉寫出
} catch (Exception e) {
e.printStackTrace();
} finally {
if (mm != null) {
mm.close();
}
}
}
@Override
public void run() {
currentThread().setName("一個都別跑:"); // 獲取執行緒名稱:一個都別跑:
String title; // 標題
String content; // 內容
for (String url : UrlList) {
try {
Document document = Jsoup.connect(url).timeout(6000).get();
title = document.select("h1").toString(); // 獲取標籤h1的為標題
content = document.select(".bbt-html").html(); // 獲取類:.bbt-html 的為內容
File file = new File(PATH + title.replaceAll("<h1 data-v-3b3042fa>", "").replaceAll("</h1>", "") + ".txt"); //建立一個地址為PATH加標題去掉<h1>標籤的txt檔案
createFile(file);
writeTxtFile(content, file);
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
嗯,在編寫此片文章時,查看了一下顯示效果,程式碼部分不缺在程式碼編輯框中,未做排版。希望大家能夠看懂吧