Java原生代码实现爬虫(爬取小说)(java开源爬虫平台)

createh53个月前 (02-01)技术教程36

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

字符串操作

异常处理

代码思路:

  1. 根据小说存放位置创建file对象
  2. 根据网页结构编写正则,创建pattern对象
  3. 编写循环,创建向所有小说章节页面发起网络请求的url对象
  4. 网络流BufferReader
  5. 创建输入流
  6. 循环读取请求得到的内容,使用正则匹配其中的内容
  7. 将读取到的内容写入本地文件,知道循环结束
  8. 注意代码中的异常处理

案例代码:

案例代码:
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:\\File\\three_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、读取网络内容网络流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("", "").replace("", ""); System.out.println(title); writer.write("第" + i + "章:" + title + "\n"); } while (m_content.find()) { String content = m_content.group(); // 清洗得到的数据 content = content.replace("

", "").replace("

", "").replace(" ", "").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(); } } } }

运行效果:

相关文章

java进行后台数据写入word模板再进行压缩包下载

经常会遇到这样需求,写一个导出功能,进行word模板格式进行导出,数据库相应数据回填到word模板中,再对这个模板进行导出功能。如果一次性需要导出多个模板情况下,就要对多个进行压缩成一个压缩包再一次性...

Java操作Office:POI之word生成(java生成doc文档)

程序员架构进阶一 背景 最近在项目开发中,有数据导出到word的需求。这就涉及代码生成word文档的操作,且有格式要求。大家用word做过简历的都有了解,做简历时,会使用表格、图片、文字等元素。而且表...

Java中excel文件解析总结以及超大文件读写的分析报告

在系统与系统之间进行数据传递时,经常需要使用Excel文件来进行数据的导入或者导出。因此,在Java语言实现这类需求时,往往会面临着数据的导入(解析)或者导出(生成)。Java中可以用来处理Excel...

「Java进阶」I/O操作必备知识点:字节流读写实例讲解

序欢迎来到全网最完整的Java进阶知识系列教程!!!每天定时更新!!!本期的课程,我们继续分享I/O文件读写。IO文件读写,根据数据格式不同,分为字节流读写和字符流读写,我们今天先讲字节流读写。如果你...

一文了解 DataLeap 中的 Notebook

一、概述Notebook 是一种支持 REPL 模式的开发环境。所谓「REPL」,即「读取-求值-输出」循环:输入一段代码,立刻得到相应的结果,并继续等待下一次输入。它通常使得探索性的开发和调试更加便...

进大厂必备的Java八股文大全(2022最强精简易懂版)

2022年秋招即将来临,很多同学会问Java面试八股文有必要背吗?答案是,必须背,博主是个三本,今年凭借这篇八股文斩获了多个大厂暑期实习offer,相信秋招一定也可以发挥重要作用。你可以讨厌这种模式,...