import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class WebContent {
/**
* 读取一个网页全部内容
*/
public String getOneHtml(String htmlurl) throws Exception {
URL url;
String temp;
StringBuffer sb = new StringBuffer();
url = new URL(htmlurl);
BufferedReader in = new BufferedReader(new InputStreamReader(url
.openStream(), "utf-8"));// 读取网页全部内容
while ((temp = in.readLine()) != null) {
sb.append(temp);
}
in.close();
return sb.toString();
}
/**
*
* @param s
* @return 获得网页标题
*/
public String getTitle(String s, boolean isnew) {
String regex;
String title = "";
List list = new ArrayList();
regex = "<title>.*?</title>";
Pattern pa = Pattern.compile(regex, Pattern.CANON_EQ);
Matcher ma = pa.matcher(s);
while (ma.find()) {
list.add(ma.group());
}
for (int i = 0; i < list.size(); i++) {
title = title + list.get(i);
}
return outTag(title);
}
// 标记替换定义 其中FGF是被替换与要替换标记之间的分隔符
private static String[] bjs = {"<FGF<", ">FGF76>", ""FGF76\""};
/**
* 获得正文与回复,指新帖子
*/
public String[] getTiezi(String s) {
String regex;
List list = new ArrayList();
regex = "msgfont.*?</div>";
Pattern pa = Pattern.compile(regex, Pattern.MULTILINE);
Matcher ma = pa.matcher(s);
while (ma.find()) {
list.add(outTag(ma.group().replaceAll("msgfont\">", "").replaceAll("<br />", "\r\n").replaceAll("<br/>", "\r\n").replaceAll(" ", "")));
}
String[] reStr = new String[list.size()];
for (int i = 0; i < reStr.length; i++) {
reStr[i] = replaceByBj(bjs, (String) list.get(i));
}
return reStr;
}
public static String replaceByBj(String[] bjs, String nrstr){
for(int i=0;i<bjs.length;i++){
String[] bjd = bjs[i].split("NLLD76");
nrstr = nrstr.replaceAll(bjd[0], bjd[1]);
}
return nrstr;
}
public static String[] getBjs() {
return bjs;
}
public static void setBjs(String[] bjs) {
WebContent.bjs = bjs;
}
/**
* @方法名称 获得链接
*/
public String[] getCsdnLink(String s, boolean isnew) {
if(!isnew){
return getCsdnHisLink(s);
}
String regex;
List list = new ArrayList();
regex = "http://topic.csdn.net/u.*?.html";
Pattern pa = Pattern.compile(regex, Pattern.MULTILINE);
Matcher ma = pa.matcher(s);
while (ma.find()) {
list.add(ma.group());
}
String[] reStr = new String[list.size()];
for (int i = 0; i < reStr.length; i++) {
reStr[i] = (String) list.get(i);
}
return reStr;
}
public String[] getCsdnHisLink(String s) {
String regex;
List list = new ArrayList();
regex = "http://topic.csdn.net.*?.html";
Pattern pa = Pattern.compile(regex, Pattern.MULTILINE);
Matcher ma = pa.matcher(s);
while (ma.find()) {
list.add(ma.group());
}
String[] reStr = new String[list.size()];
for (int i = 0; i < reStr.length; i++) {
reStr[i] = (String) list.get(i);
}
return reStr;
}
/**
*
* @param s
* @return 获得链接
*/
public List getLink(String s) {
String regex;
List list = new ArrayList();
regex = "<a[^>]*href=</a>";
Pattern pa = Pattern.compile(regex, Pattern.DOTALL);
Matcher ma = pa.matcher(s);
while (ma.find()) {
list.add(ma.group());
}
return list;
}
/**
*
* @param s
* @return 获得脚本代码
*/
public List getScript(String s) {
String regex;
List list = new ArrayList();
regex = "<script.*?</script>";
Pattern pa = Pattern.compile(regex, Pattern.DOTALL);
Matcher ma = pa.matcher(s);
while (ma.find()) {
list.add(ma.group());
}
return list;
}
/** */
/**
*
* @param s
* @return 获得CSS
*/
public List getCSS(String s) {
String regex;
List list = new ArrayList();
regex = "<style.*?</style>";
Pattern pa = Pattern.compile(regex, Pattern.DOTALL);
Matcher ma = pa.matcher(s);
while (ma.find()) {
list.add(ma.group());
}
return list;
}
/** */
/**
*
* @param s
* @return 去掉标记
*/
public String outTag(String s) {
return s.replaceAll("<.*?>", "");
}
public static void main(String[] args) {
WebContent w = new WebContent();
String url = "http://forum.csdn.net/PointForum/Forum/BFTopicList.aspx?Alias=Java&ListType=UnClosedList&page=1";
try {
String s = w.getOneHtml(url);
String[] title2 = w.getTiezi(s);
for (int i = 0; i < title2.length; i++) {
System.out.println(title2[i]);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
分享到:
相关推荐
综上所述,“采集蛙-源码”项目结合了Java的网络爬虫技术和JavaFX的GUI开发,构建了一个能够自动抓取网站源代码的工具,其设计和实现涵盖了多个核心的编程和软件开发概念。对于学习者而言,深入理解这些技术可以帮助...
开源项目让你也可以尝试玩转工业物联网以及智慧工厂(智能制造),IOT开源网关、SCADA取数开源、PLC数据采集java与三菱 A-1E PLC通信 java与Melsec PLC通信 全开源 springboot与Melsec PLC A-1E通信上位机三菱PLC通信...
JAVA编写OMRON Fins TCP协议与OMRON PLC通讯源码 文件类型:程序源代码 主要功能: 本实例基于OMRON Fins TCP协议,采用JAVA语言编写上位机软件实现Socket与OMRON CP系列PLC通讯,实例中通过发送指令实现与PLC的通讯...
通过阅读源码,可以学习到如何使用Java进行网络编程、多线程编程、数据处理和可视化、异常处理等方面的知识。对于想要深入理解Java网络应用开发或者有兴趣构建自己远程监控系统的开发者来说,这是一个宝贵的资源。...
更多Python&Echarts版的数据可视化大屏源码: ...更多Java SpringBoot&Echarts版的数据可视化大屏源码: https://yydatav.blog.csdn.net/article/details/123652970 更多《工厂订单出入库信息管理系统》案例源码: ...
基于Java开发的智能电表采集系统源码+项目说明书.zip 该资源内项目代码都是经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等...
Android视频采集+RTSP完整代码(可用) Android远程登录含有loading登录效.zip Angle v1.0_2D游戏引擎.ZIP BOOK看遍所有UI控件.7z BrewClock闹钟.zip BTAndroidWebViewSelection(webview选择文字) cellmap v2.0 ...
基于Java的现场快递柜状态采集与控制系统后端源码(大学课设).zip 该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到94.5分,放心下载使用! 该资源适合计算机相关专业(如...
java多线程源码ETL提取,转换和加载 该项目是基于Java Maven的ETL,可以轻松地集成到任何产品。 它是用于多线程ETL的完整软件包-它包含代码,可以并行使用来自分布式Apache Kafka服务器的消息; 其次,它具有易于...
- 图像捕获:首先,系统需要获取到包含车牌的图像,这通常通过摄像头或其他图像采集设备完成。 - 预处理:捕获的图像可能包含噪声、模糊、光照不均等问题,需要进行预处理,如灰度化、直方图均衡化、二值化、边缘...
这些函数涵盖了从音频数据采集到特征提取、模型匹配和结果解码等一系列过程。例如,它有功能强大的前端处理模块,可以对输入的音频进行降噪、分帧、加窗等操作;在特征提取阶段,Sphinx4可以计算MFCC(梅尔频率倒谱...
本资源中的源码都是经过本地编译过可运行的,下载后按照文档配置好环境就可以运行。资源项目的难度比较适中,内容都是经过助教老师审定过的,应该能够满足学习、使用需求,如果有需要的话可以放心下载使用。有任何...
在这个Java项目中,WebRTC可能被用作客户端的视频和音频采集以及编码,通过WebSocket将这些媒体数据传输到服务器。WebRTC包括了getUserMedia API(获取用户媒体),RTCPeerConnection(处理音视频流的传输)和...
4. **物联网(IoT)集成**:考虑到是针对硬件设备的数据采集,这个Java应用可能涉及到与IoT设备的接口。这可能需要理解设备的通信协议(如MQTT、Modbus或OPC UA),以及如何使用Java的物联网库(如Paho MQTT Client)...
与前一版本V4.1_1102相比,说明如下: 1、修正了后台频繁开关新窗口后失去焦点的BUG 2、修正了上传控件的安全问题 3、修正了FoxMail、OutLook等客户端收邮件乱码的BUG ...5、修正了采集中“高级过滤”失效的BUG
系统给每个资产档案提供一个唯一标识,对物品入库、出库等各个作业环节进行快速批量的数据采集,确保中小企业及时掌握资产库存的真实数据,合理保持和控制企业库存 前端 lVue:Vue 是构建前端界面的核心框架,本系统...
4. **Android开发**:Android端的代码由Java语言编写,使用Android Studio开发环境。这部分代码负责接收蓝牙传来的温度数据,并在界面上显示。Android Bluetooth API提供了与蓝牙设备交互的接口,包括扫描、连接、...
资源包里包含了所有完整源码、包含环境安装包、环境搭建运行测试视频。 一、设计需求 本系统主要是由RFID自动识别技术,通过无线射频方式对宠物的电子标签进行读取,获取宠物的基本信息和在店内的所有消费,然后将...
资源包含文件:lunwen文档+项目源码 用户打开本系统,首先要输入帐号密码,成功通过验证之后,根据用户类型选择进入医生界面或管理员界面。 在医生界面,医生可以选择三种医案录入的方式:手工录入,即医生将病人...
资源内容:基于Python的天气预测与可视化(完整源码+说明文档+数据).rar 代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 适用对象:工科生、数学专业、算法等方向学习者。 作者介绍:某大厂...