博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
网络抓取功能实现 将获取的结果进行过滤并写入到TXT文档中
阅读量:4327 次
发布时间:2019-06-06

本文共 4005 字,大约阅读时间需要 13 分钟。

下面是自己编写的 网络抓取功能实现 将获取的结果进行过滤并写入到TXT文档中 (以防忘记) 原创哟

 

import java.io.BufferedReader;

import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.ObjectOutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class WebClient4 {

public static String getWebContent(String urlString, final String charset,
int timeout) throws IOException {
if (urlString == null || urlString.length() == 0) {
return null;
}
urlString = (urlString.startsWith("http://") || urlString
.startsWith("https://")) ? urlString : ("http://" + urlString)
.intern();
URL url = new URL(urlString);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn
.setRequestProperty(
"User-Agent",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727)");
conn.setRequestProperty("Accept", "text/html");
conn.setConnectTimeout(timeout);
try {
if (conn.getResponseCode() != HttpURLConnection.HTTP_OK) {
return null;
}
} catch (IOException e) {
e.printStackTrace();
return null;
}
InputStream input = conn.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(input, charset));
String line = null;
StringBuffer sb = new StringBuffer();
while ((line = reader.readLine()) != null) {
sb.append(line).append("\r\n");
}
if (reader != null) {
reader.close();
}
if (conn != null) {
conn.disconnect();
}
return sb.toString();

}

public static String getWebContent(String urlString) throws IOException {

return getWebContent(urlString, "iso-8859-1", 5000);
}

// public static void main(String[] args) throws IOException {

// String s = getWebContent("http://music.baidu.com/top/new");
// s = new String(s.getBytes("iso-8859-1"), "utf-8");
// System.out.println("开始");
// String regex="<span.*?><a.*?>(.*?)</a></span>";
// Pattern p =Pattern.compile(regex);
// Matcher m=p.matcher(s);
// while(m.find()){
// System.out.println(m.group(1));
// }
// System.out.println("结束");
System.out.println(s);
// }
public static void main(String[] args) throws IOException {
System.out.println("开始");

// 这里为要变更你自己需要抓取的网络地址

// String s = getWebContent("http://music.baidu.com/top/new");
String s = getWebContent("http://music.baidu.com/top/new/week/");

// 这里的字体设置是 将页面的IOS-8859-1 转换为UTF-8 编码格式 方便后面将查询出的数据写入到txt文档中

s = new String(s.getBytes("iso-8859-1"), "utf-8");
// System.out.println(s);

// 第一种方式  这是获取本页面上的过滤条件

// String regex="<a href=\\\"/song/.*?\\\" title=\\\"(.*?)\\\">";
// 第二种方式 这是获取本页面上的过滤条件
String regex="<a class=\\\"song-link\\\" href=\\\"/song/.*?\\\" title=\\\"(.*?)\\\">";

// Pattern 和 Matcher 为正则表达式的方法  为设置过滤条件

Pattern p =Pattern.compile(regex);
Matcher m=p.matcher(s);
String line2 = null;

// 定义StringBuffer 用来存储字符串方便后期写入文档

StringBuffer sb2 = new StringBuffer();
while(m.find())

// 打印出满足条件的数据

System.out.println(m.group(1));

line2 = m.group(1);
sb2.append(line2).append("\r\n");
}
wirteString("F:/cc2.txt",sb2.toString());
// System.out.println(s);
System.out.println("结束");
}
/* 往文件写入字符串 */
public static void wirteString(String path, String context) {
try {
/* 创建写入对象 */
FileWriter fileWriter = new FileWriter(path);
/* 创建缓冲区 */
BufferedWriter writer = new BufferedWriter(fileWriter);
/* 写入字符串 */
writer.write(context);
/* 关掉对象 */
writer.close();
System.out.println("写入字符串成功!");
} catch (IOException e) {
e.printStackTrace();
}
}
/* 将对象写入文件方法 */
public void write(Object o, String path) {
try {
/* 创建存取文件 */
FileOutputStream fileStream = new FileOutputStream(path);
/* 将存取文件写入对象 */
ObjectOutputStream os = new ObjectOutputStream(fileStream);
/* 写入对象 */
os.writeObject(o);
System.out.println("写入数据成功");
/* 关闭ObjectOutputStream */
os.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}

 

转载于:https://www.cnblogs.com/meimao5211/p/3794977.html

你可能感兴趣的文章
小D课堂 - 零基础入门SpringBoot2.X到实战_第2节 SpringBoot接口Http协议开发实战_9、SpringBoot基础HTTP其他提交方法请求实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第2节 SpringBoot接口Http协议开发实战_12、SpringBoot2.x文件上传实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第4节 Springboot2.0单元测试进阶实战和自定义异常处理_19、SpringBoot个性化启动banner设置debug日志...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第4节 Springboot2.0单元测试进阶实战和自定义异常处理_20、SpringBoot2.x配置全局异常实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第5节 SpringBoot部署war项目到tomcat9和启动原理讲解_23、SpringBoot2.x启动原理概述...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第4节 Springboot2.0单元测试进阶实战和自定义异常处理_21、SpringBoot2.x配置全局异常返回自定义页面...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第8节 数据库操作之整合Mybaties和事务讲解_32..SpringBoot2.x持久化数据方式介绍...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第8节 数据库操作之整合Mybaties和事务讲解_34、SpringBoot整合Mybatis实操和打印SQL语句...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第8节 数据库操作之整合Mybaties和事务讲解_35、事务介绍和常见的隔离级别,传播行为...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第9节 SpringBoot2.x整合Redis实战_40、Redis工具类封装讲解和实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第9节 SpringBoot2.x整合Redis实战_37、分布式缓存Redis介绍...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第10节 SpringBoot整合定时任务和异步任务处理_42、SpringBoot常用定时任务配置实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第9节 SpringBoot2.x整合Redis实战_39、SpringBoot2.x整合redis实战讲解...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第14节 高级篇幅之SpringBoot多环境配置_59、SpringBoot多环境配置介绍和项目实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第10节 SpringBoot整合定时任务和异步任务处理_41、SpringBoot定时任务schedule讲解...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第10节 SpringBoot整合定时任务和异步任务处理_43、SpringBoot2.x异步任务实战(核心知识)...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_1_01课程简介
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第11节 Logback日志框架介绍和SpringBoot整合实战_45、SpringBoot2.x日志讲解和Logback配置实战...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_1_02技术选型
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_汇总
查看>>