如何将网页转为TXT文件并实现关键词实时监测?
网页关键词实时监控解决方案
嘿,我来帮你搞定这个问题!先说说你原代码里的几个小坑,这会导致关键词检测失效:
- 读取网页时你每次都用
str = in.readLine()覆盖之前的内容,最后只保留了网页的最后一行,大部分关键词当然找不到啦 - 没有设置循环间隔,程序会疯狂刷请求,不仅浪费资源,还容易被服务器限制访问
- 关键词硬编码在代码里,要改的话得重新编译,太不灵活了
下面是调整后的完整代码,我标了关键改进点,你一看就懂:
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.URL; import java.util.regex.Matcher; import java.util.regex.Pattern; public class WebKeywordMonitor { public static void main(String[] args) { // 灵活设置关键词:命令行传参就用参数,不传就用默认的人名 String targetKeyword = args.length > 0 ? args[0] : "Абрамов Николай Викторович"; // 预编译正则表达式,重复检测时更高效 Pattern pattern = Pattern.compile(targetKeyword); while (true) { try { URL url = new URL("http://abit.itmo.ru/page/195"); BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream())); StringBuilder contentBuilder = new StringBuilder(); String line; // 把网页所有内容拼接成完整字符串,不再只留最后一行 while ((line = in.readLine()) != null) { contentBuilder.append(line); // 如果需要保留换行符方便调试,可以加这句:contentBuilder.append(System.lineSeparator()); } in.close(); String fullPageContent = contentBuilder.toString(); // 调试时可以打印网页内容,正式运行注释掉就行 // System.out.println(fullPageContent); Matcher matcher = pattern.matcher(fullPageContent); if (matcher.find()) { System.out.println("Yes"); System.exit(0); // 找到关键词直接退出程序 } // 每秒检查一次,避免刷请求 Thread.sleep(1000); } catch (IOException e) { // 别忽略异常!打印错误信息才能知道哪里出问题了 System.err.println("请求网页失败: " + e.getMessage()); // 失败后也等1秒再重试 try { Thread.sleep(1000); } catch (InterruptedException ie) { Thread.currentThread().interrupt(); break; } } catch (InterruptedException e) { Thread.currentThread().interrupt(); break; } } } }
关键改进点说明:
- 完整读取网页内容:用
StringBuilder把每一行内容拼起来,确保能检查网页的全部内容,再也不会漏掉关键词 - 支持任意关键词:运行程序时直接传参就能换关键词,比如
java WebKeywordMonitor "你的自定义关键词",不传参就用默认的人名,灵活得很 - 添加请求间隔:每次循环后休眠1秒,既不浪费资源,也不会被服务器当成恶意请求拦截
- 优化性能:提前预编译正则表达式,不用每次循环都重新编译,重复检测时更快
- 完善异常处理:不再默默吃掉IO异常,打印错误信息方便你排查问题,请求失败后也会延迟重试
- 规范命名:把类名改成
WebKeywordMonitor,符合Java命名规范,以后维护起来更轻松
怎么用?
- 编译代码:
javac WebKeywordMonitor.java - 用默认关键词运行:
java WebKeywordMonitor - 用自定义关键词运行:
java WebKeywordMonitor "你要检测的任意词汇"
这样程序就会每秒检查一次目标网页,一旦发现关键词就输出"Yes"并退出啦!
内容的提问来源于stack exchange,提问作者plaza-moon
相关产品推荐
相关产品推荐

