1. 程式人生 > >Java編寫爬蟲,並儲存本地檔案,未涉及圖片,視訊的儲存,只是儲存文字內容

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

}

}

嗯,在編寫此片文章時,查看了一下顯示效果,程式碼部分不缺在程式碼編輯框中,未做排版。希望大家能夠看懂吧