Java也能做爬蟲。
現在提到爬蟲人第一個想到的就是python,其實使用Java編寫爬蟲也是很好的選擇,Java成熟的爬蟲框架很多,下面給大家展示一個使用Java基礎語言編寫的爬取小說的案例:
實現功能:
爬取目標網站全本小說
代碼編寫環境:
JDK:1.8.0_191
Eclipse:2019-03 (4.11.0)
素材:
網站:http://www.shicimingju.com(如有侵權,請聯系我刪除,謝謝)
小說:三國演義
案例實現用到的技術:
正則表達式
Java網絡通信:URL
IO流
Map—HashMap
字符串操作
異常處理
代碼思路:
- 根據小說存放位置創建file對象
- 根據網頁結構編寫正則,創建pattern對象
- 編寫循環,創建向所有小說章節頁面發起網絡請求的url對象
- 網絡流BufferReader
- 創建輸入流
- 循環讀取請求得到的內容,使用正則匹配其中的內容
- 將讀取到的內容寫入本地文件,知道循環結束
- 注意代碼中的異常處理
案例代碼:
案例代碼:package com.qianfeng.text;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileOutputStream;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.net.URL;import java.util.regex.Matcher;import java.util.regex.Pattern;public class GetText {public static void main(String[] args) {// 1、根據小說存放位置創建file對象File file = new File("D:Filehree_guo.txt");// 2、根據網頁結構編寫正則,創建pattern對象String regex_content = "(.*?)";String regex_title = "(.*?)";Pattern p_content = Pattern.compile(regex_content);Pattern p_title = Pattern.compile(regex_title);Matcher m_content;Matcher m_title;// 3、編寫循環,創建向所有小說章節頁面發起網絡請求的url對象for (int i = 1; i <= 120; i++) {System.out.println("第" + i + "章開始下載。。。");try {// 創建每一個頁面的url對象URL url = new URL("http://www.shicimingju.com/book/sanguoyanyi/" + i + ".html");// 創建網絡讀取流BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream(),"utf8"));// 4、讀取網絡內容網絡流BufferReaderString str = null;// 5、創建輸入流BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file,true)));while ((str = reader.readLine()) != null) {m_title = p_title.matcher(str.toString());m_content = p_content.matcher(str.toString());// 獲取小說標題并寫入本地文件Boolean isEx = m_title.find();if (isEx) {String title = m_title.group();// 清洗得到的數據title = title.replace("", "").replace("", "");System.out.println(title);writer.write("第" + i + "章:" + title + "");}while (m_content.find()) {String content = m_content.group();// 清洗得到的數據content = content.replace("
", "").replace("
", "").replace(" ", "").replace("?", "");// 把小說內容寫入文件writer.write(content + ""); }}System.out.println("第" + i + "章下載完成.........");writer.write("");writer.close();reader.close();} catch (Exception e) {System.out.println("下載失敗");e.printStackTrace();}}}}
運行效果:
