You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将网页转为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命名规范,以后维护起来更轻松

怎么用?

  1. 编译代码:javac WebKeywordMonitor.java
  2. 用默认关键词运行:java WebKeywordMonitor
  3. 用自定义关键词运行:java WebKeywordMonitor "你要检测的任意词汇"

这样程序就会每秒检查一次目标网页,一旦发现关键词就输出"Yes"并退出啦!

内容的提问来源于stack exchange,提问作者plaza-moon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 09:12:48