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();}}}}
运行效果: