Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-打印HTML元素的任何细节_Java_Swing_Html Parsing - Fatal编程技术网

Java-打印HTML元素的任何细节

Java-打印HTML元素的任何细节,java,swing,html-parsing,Java,Swing,Html Parsing,我对Java相当陌生,至少在与web交互方面是这样。无论如何,我正在制作一个应用程序,它必须从网页中抓取HTML,并对其进行解析 通过解析,我的意思是找出元素在“class=”“”属性或元素中可用的任何属性中有什么。还要找出元素内部的内容。这是我迄今为止搜索的地方: 关于这一点,我发现很少 我知道有很多Java解析器。我尝试了JTidy和默认的Swing解析器。我更喜欢使用内置的java解析器 以下是我到目前为止所拥有的(这只是一种测试它如何工作的方法,当我知道什么和如何工作时,就会出现正确的代

我对Java相当陌生,至少在与web交互方面是这样。无论如何,我正在制作一个应用程序,它必须从网页中抓取HTML,并对其进行解析

通过解析,我的意思是找出元素在“class=”“”属性或元素中可用的任何属性中有什么。还要找出元素内部的内容。这是我迄今为止搜索的地方:

关于这一点,我发现很少

我知道有很多Java解析器。我尝试了JTidy和默认的Swing解析器。我更喜欢使用内置的java解析器

以下是我到目前为止所拥有的(这只是一种测试它如何工作的方法,当我知道什么和如何工作时,就会出现正确的代码。连接也是一个URLConnection变量,并且在调用此方法之前已经建立了连接。<仅澄清一下):

public void parse(){
试一试{
InputStream is=connection.getInputStream();
InputStreamReader isr=新的InputStreamReader(is);
BufferedReader br=新的BufferedReader(isr);
弦线;
而((line=br.readLine())!=null){
系统输出打印项次(行);
}
//抄袭http://www.java2s.com/Code/Java/Development-Class/HTMLDocumentElementIteratorExample.htm
HTMLEditorKit htmlKit=新的HTMLEditorKit();
HTMLDocument htmlDoc=(HTMLDocument)htmlKit.createDefaultDocument();
Parser Parser=new ParserDelegator();
HTMLEditorKit.ParserCallback回调=htmlDoc.getReader(0);
parser.parse(br,回调,true);
//解析
ElementIterator迭代器=新的ElementIterator(htmlDoc);
元素;
while((element=iterator.next())!=null){
AttributeSet attributes=element.getAttributes();
对象名称=attributes.getAttribute(StyleConstants.NameAttribute);
System.out.println(“所有“+name+”属性:“+attributes.getAttributeNames().toString());
枚举e=attributes.getAttributeNames();
对象对象对象;
而(e.hasMoreElements()){
obj=e.nextElement();
System.out.println(obj.toString());
System.out.println(“类的属性=“+attributes.containsAttribute”(“类”、“登录”));
}
if((name instanceof HTML.Tag)
&&((name==HTML.Tag.H1)| |(name==HTML.Tag.H2)| |(name==HTML.Tag.H3))){
//构建内容文本,因为它可能位于多个元素中
StringBuffer text=新的StringBuffer();
int count=element.getElementCount();
for(int i=0;i

问题是:如何获取任何元素的属性并将其打印出来?

此代码不必要地冗长。我建议使用更好的图书馆,比如。下面是一些代码,用于查找此页面上所有
div
的所有属性

String url = "http://stackoverflow.com/questions/7311269"
             + "/java-print-any-detail-of-html-element";
Document doc = Jsoup.connect(url).get();
Elements divs = doc.select("div");
int i = 0;
for (Element div : divs) {
    System.out.format("Div #%d:\n", ++i);
    for(Attribute attr : div.attributes()) {
        System.out.format("%s = %s\n", attr.getKey(), attr.getValue());
    }
}

请遵循,对这个强大的库进行温和的介绍。

对不起,您的问题是什么?如何找出哪些元素有class属性以及其中的内容,以及如何找出元素内部的内容(这在代码中是部分完成的,对其进行一点修改就可以了,但我仍然坚持使用属性). 或者如果HTML中的特定元素具有此属性。同样,问题是:如何找出元素具有什么属性。感谢下载和使用,如果您需要一个易于使用的灵活Java HTML解析器。不要试图自己去做,Java没有“内置Java”HTML解析器。你可以使用XMLDOMAPI来解析HTML,在那里你可以很容易地得到属性列表。请看@Daniel:只有在您能够保证HTML完全符合XML标准的情况下,这才有效。这里是JTidy的亮点,因为我相信它正是如此。阿门和1+为您提供了合适的答案——来自另一位JSoup粉丝。JSoup似乎真的理解我想要什么。谢谢还在玩代码;)天啊。如果我有权力给你一百万张选票,我会的,因为你帮我省了几个小时的工作。谢谢
String url = "http://stackoverflow.com/questions/7311269"
             + "/java-print-any-detail-of-html-element";
Document doc = Jsoup.connect(url).get();
Elements divs = doc.select("div");
int i = 0;
for (Element div : divs) {
    System.out.format("Div #%d:\n", ++i);
    for(Attribute attr : div.attributes()) {
        System.out.format("%s = %s\n", attr.getKey(), attr.getValue());
    }
}