java使用正则表达式抓取网页内容存为txt
时间:2022-06-18
本文章向大家介绍java使用正则表达式抓取网页内容存为txt,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
前几天女友在网上看了一本电子书,想要下载下来,不过那个网站只能支持在线阅读,不提供下载,还好可以复制粘贴。
于是这个复制粘贴的任务便交给了我,看了一下网站url,单篇文章的html源码都很简单,作为一个程序员怎么可以重复的复制粘贴呢?
于是有了这个代码,比较简单:
package WEB;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 网页抓取
* @author 胡阳
* @blog http://www.the5fire.com
*
*/
public class WebGet {
private String myUrl;
private HttpURLConnection con;
private StringBuilder contextAll = new StringBuilder("");
private int pageCount = 0;
private String pageType = "";
public WebGet() {
}
public WebGet(String url) {
this.myUrl = url;
}
public WebGet(String url,int pageCount,String pageType) {
this.myUrl = url;
this.pageCount = pageCount;
this.pageType = pageType;
}
/**
* 正则表达式
* */
public String regex() {
String googleRegex = "";
return googleRegex;
}
public void init(String url, String page) throws IOException {
this.myUrl = "http://www.tianyabook.com/qita/hougeixue/";
this.init(page);
}
public void init(String page) throws IOException {
if (myUrl != null && !myUrl.equals("")) {
URL urlmy = new URL(myUrl + page + ".html");
con = (HttpURLConnection) urlmy.openConnection();
con.setFollowRedirects(true);
con.setInstanceFollowRedirects(false);
con.connect();
}
}
/**
* 写字符串中数据到txt文件
* @param context
* @return
* @throws IOException
*/
public boolean writeTxt(String context,String filePath) throws IOException {
System.out.println("开始写文件。。");
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(
filePath));
osw.write(context, 0, context.length());
osw.flush();
osw.close();
return true;
}
/**
* 获得网页内容,要指定编码格式
* @param codeType GB2312/UTF-8/……
* @return
* @throws IOException
* @throws
*/
public String getContent(String codeType) throws IOException{
if(pageCount < 1){
return "null";
}
System.out.println("开始抓取内容。。。。。");
for (int i = 1; i < pageCount; i++) {
System.out.println("抓取第 " + i + "页");
this.init(String.valueOf(i));
BufferedReader br = new BufferedReader(new InputStreamReader(con
.getInputStream(), codeType));
String s = "";
StringBuffer sb = new StringBuffer("");
while ((s = br.readLine()) != null) {
sb.append(s);
}
String result = sb.toString();
Pattern pattern = Pattern.compile(regex());
Matcher matcher = pattern.matcher(result);
while (matcher.find()) {
String title = matcher.group().replaceAll("<.*?>", "")
.replaceAll(" ", "");
contextAll.append(title + "nt");
}
System.out.println("完成:" + i + "页");
System.out.println("");
}
return contextAll.toString();
}
public static void main(String[] args) throws IOException {
WebGet wg = new WebGet("http://www.tianyabook.com/qita/hougeixue/",227,"html");
try {
if (wg.writeTxt(wg.getContent("GB2312"),"D:\houhei.txt")) {
System.out.println("完成");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- CMake入门实战——单个源文件
- [Go] GO语言实战-实现标题闪烁
- Windows平台安装Oracle11.2.0.4客户端报错INS-30131
- 实战丨如何制作一个完整的外卖微信小程序开发项目(已开源)
- CMake入门实战——多个源文件
- CMake入门实战——自定义编译选项
- CMake入门实战——其他
- git报错,远程克隆和更新不下来解决方法
- CMake入门实战——生成安装包
- PyTorch 60分钟入门系列之PyTorch简介
- 解决Nginx转发http后不走https的问题 后端tomcat
- PyTorch 60分钟入门系列之自动求导
- Roslyn 打包 NuGet 包添加改动日志
- PyTorch 60分钟入门系列之神经网络
- Linux 是如何管理内存的?