Java爬蟲:用java爬取小說


Java也能做爬蟲。

現在提到爬蟲人第一個想到的就是python,其實使用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

創建輸入流

循環讀取請求得到的內容,使用正則匹配其中的內容

將讀取到的內容寫入本地文件,知道循環結束

注意代碼中的異常處理

 

 

運行效果

 

第117章開始下載。。。。。。。。。。。。。。。。。

鄧士載偷度陰平 諸葛瞻戰死綿竹_《三國演義》_詩詞名句網

第117章結束下載。。。。。。。。。。。。。。。。。

第118章開始下載。。。。。。。。。。。。。。。。。

哭祖廟一王死孝 入西川二士爭功_《三國演義》_詩詞名句網

第118章結束下載。。。。。。。。。。。。。。。。。

第119章開始下載。。。。。。。。。。。。。。。。。

假投降巧計成虛話 再受禪依樣畫葫蘆_《三國演義》_詩詞名句網

第119章結束下載。。。。。。。。。。。。。。。。。

第120章開始下載。。。。。。。。。。。。。。。。。

薦杜預老將獻新謀 降孫皓三分歸一統_《三國演義》_詩詞名句網

第120章結束下載。。。。。。。。。。。。。。。。。

 

 

案例代碼:

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 {

/**

* 1、根據小說存放位置創建file對象

2、根據網頁結構編寫正則,創建pattern對象

3、編寫循環,創建向所有小說章節頁面發起網絡請求的url對象

4、網絡流BufferReader

5、創建輸入流

6、循環讀取請求得到的內容,使用正則匹配其中的內容

7、將讀取到的內容寫入本地文件,知道循環結束

8、注意代碼中的異常處理

 

* @param args

*/

public static void main(String[] args) {

// 1、根據小說存放位置創建file對象

File file = new File("D:\\File\\three_guo.txt");

// 2、根據網頁結構編寫正則,創建pattern對象

String regex_content = "<p.*?>(.*?)</p>";

String regex_title = "<title>(.*?)</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、讀取網絡內容網絡流BufferReader

String 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("<title>", "").replace("</title>", "");

System.out.println(title);

writer.write("第" + i + "章:" + title + "\n");

}

 

while (m_content.find()) {

String content = m_content.group();

// 清洗得到的數據

content = content.replace("<p>", "").replace("</p>", "").replace("&nbsp;", "").replace("?", "");

// 把小說內容寫入文件

writer.write(content + "\n");

}

 

}

 

System.out.println("第" + i + "章下載完成.........");

 

writer.write("\n\n");

writer.close();

reader.close();

} catch (Exception e) {

System.out.println("下載失敗");

e.printStackTrace();

}

}

}

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM