Java原生代码实现爬虫(爬取小说)

liftword3个月前 (03-24)技术文章20

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

运行效果:

相关文章

Python爬取小说技术指南

在 Python 中爬取小说需要遵循法律法规和网站的服务条款,请确保你有权获取目标内容。以下是使用 Python 爬取小说的通用技术流程安装依赖库pip install requests beauti...

python:最简单爬虫之爬取小说网Hello wrold

以下用最简单的示例来演示爬取某小说网的类目名称。新建一个retest.py,全文代码如下,读者可以复制后直接运行。代码中我尽量添加了一些注释便于理解。需要说明的一点,该小说网站如果后续更新改版了,文中...

python爬取电子课本,送给居家上课的孩子们

在这个全民抗疫的日子,中小学生们也开启了居家上网课的生活。很多没借到书的孩子,不得不在网上看电子课本,有的电子课本是老师发的网络链接,每次打开网页去看,既费流量,也不方便。今天我们就利用python的...

Python爬虫:用Beautifulsoup爬取html文本数据

Beautifulsoup介绍:是一个高效的网页解析库,可以从HTML或XML文件中提取数据支持不同的解析器,比如,对HTML解析,对XML解析,对HTML5解析就是一个非常强大的工具,爬虫利器一个灵...

Python“三步”即可爬取,毋庸置疑

声明:本实例仅供学习,切忌遵守robots协议,请不要使用多线程等方式频繁访问网站。#第一步导入模块import reimport requests#第二步获取你想爬取的网页地址,发送请求,获取网页内...