繁体   English   中英

Java-无法从Web端获取HTML纯文本

[英]Java - Unable to obtain HTML plaintext from webside

我有一个奇怪的问题。 过去,我使用我自己编写的程序来检查fanfiction.net上的故事是否开辟了新的篇章,并且该程序即使在现在也仍然可以正常工作(尽管它的GUI有很多不足之处)。

但是,当我尝试制作一个新版本时,即使我使用的代码完全相同(复制粘贴),我似乎也无法加载该网页。 这是下面的代码。 当将类似https://www.fanfiction.net/s/11012678/36的URL发送到nextExists方法时,它应该返回'true'。 我的旧程序可以,但是即使它是相同的代码,也不会。

我唯一想到的可能是,我正在使用新版本的Eclipse,这可能会导致它错误地编码,但是我尝试检查所有常见的编码类型,但没有提供HTML纯文本。

有谁知道这可能是什么原因? 如果我做对了,这不是灾难,但是如果将来我再次遇到相同的问题,我想知道以后。

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;

public class Util {
    private static final String BEFORE = "<button class=btn TYPE=BUTTON onClick=\"self.location='", AFTER = "'\">Next &gt;</button>", SITE = "fanfiction.net";

    public static String readSite(String path) throws Exception{
        URL url = new URL(path);
        BufferedReader in = null;
        String line;
        try{
            StringBuilder builder = new StringBuilder();
            in = new BufferedReader(new InputStreamReader(url.openStream()));
            line = in.readLine();
            if(line == null){
                return null;
            }
            builder.append(line);
            while((line = in.readLine()) != null){
                builder.append('\n' + line);
            }
            return builder.toString();
        } finally{
            if(in != null){
                in.close();
            }
        }
    }

    public static String updatePathToEnd(String path) throws Exception{
        outer: while(nextExists(path)){
            String data = readSite(path);
            if(path.contains(SITE)){
                String link = path.substring(0, path.indexOf(SITE) + SITE.length()) + data.substring(data.indexOf(BEFORE) + BEFORE.length(), data.indexOf(AFTER));
                if(readSite(link) != null) {
                    path = link;
                    continue outer;
                }
            }
        }
        return path;
    }

    public static boolean nextExists(String path) throws Exception{
        String text = readSite(path);
        if(path.contains(SITE)){
            return text==null ? false : text.contains(AFTER);
        }
        return false;
    }

}

我在bluej中尝试过并且工作完美,看来问题出在Eciplse Regards

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM