Java - 阅读网站而不是源代码

tes*_*est 1 java io

好的,所以我重新定义了我的最后一个程序......这里是:

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


public class asp {
    public static void main(String[] args) {
        try {
            URL game = new URL("http://localhost/mystikrpg/post.php?players");
            URLConnection connection = game.openConnection();
            BufferedReader in = new BufferedReader(new
            InputStreamReader(connection.getInputStream()));
            String inputLine;
            while ((inputLine = in.readLine()) != null) {
                System.out.println(inputLine);
            }
            in.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

问题?当我运行它...我得到整个页面...甚至代码来源,如html标签的开头一直到主体和html标签的结尾.

当真的...我希望它输出是1 ....我能看到它的唯一方法是,如果我拆分字符串<body></body>...

咩.救命?

Pas*_*ent 12

问题?当我运行它...我得到整个页面...甚至代码来源,如html标签的开头一直到主体和html标签的结尾.

嗯,这基本上就是一个HTML页面; 这就是你得到的.现在,如果您不想手动解析内容,请使用HTML Parser.有很多但我会推荐Jsoup,一个最优雅的可用库(干净漂亮的API,像CSS选择器的jQuery,非冗长的元素迭代等).演示:

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

public class JsoupDemo {
    public static void main(String[] args) throws Exception {
        URL url = new URL("http://localhost/mystikrpg/post.php?players");
        Document doc = Jsoup.parse(url, 3*1000);

        String text = doc.body().text();

        System.out.println(text); // outputs 1
    }
}
Run Code Online (Sandbox Code Playgroud)

看马云,没有手!

PS:作为旁注,我必须说我同意其他一些答案,你应该考虑生成除HTML,JSON甚至原始文本之外的其他东西(如果你真的需要,至少可以替代HTML版本)它).


bak*_*kal 8

除非您可以控制post.php并且能够在没有HTML标记(一个Web服务)的情况下使其返回所需的内容,否则您将必须解析它返回的HTML文档.

使用HTML Parser,正则表达式对此不太可靠.


<body>使用HTMLParser 解析标记的粗略代码段:

(一定要包括htmlparser.jar)

import org.htmlparser.Node;
import org.htmlparser.Parser;
import org.htmlparser.util.NodeList;
import org.htmlparser.util.ParserException;    
import org.htmlparser.filters.TagNameFilter;
import org.htmlparser.tags.BodyTag;    

public class HTMLParserTest {   
    public static String grabBodyTag (String url) {
        if(!url.startsWith("http://")){url = "http://" + url;}      
        Parser parser = new Parser();               
        TagNameFilter filter = new TagNameFilter("body");       
        try {
            parser.setResource(url);
            NodeList list = parser.parse(filter);
            Node node = list.elementAt(0);          
            if (node instanceof BodyTag) {
                BodyTag tag = (BodyTag) node;
                return   tag.toPlainTextString(); //other formats are available
            }
        } catch (ParserException e) {
            e.printStackTrace();
        }       
        return "found no body tag...";
    }   
    public static void main(String... args){
        System.out.println(grabBodyTag("google.com"));
    }

}
Run Code Online (Sandbox Code Playgroud)

这给了String"Web图像视频地图新闻图书Gmail更多..."[省略],在你的情况下,它将返回一个String带有"1"的可能有空格(如你的pastebin所示),你必须这样trim做然后转换为数字.

关闭注:制作post.php与(只)下面的代码将让你的生活更容易,如果你不需要该脚本,这回这个结果的任何其他东西.

<?php
$number = 1; // or whatever login to get it.
echo $number;
?>
Run Code Online (Sandbox Code Playgroud)


kob*_*ien 5

当您请求页面时,您将获得源代码.这是预期和正常的.您必须解析此源以提取内容.