我不想下载任何其他库,我正在谈论这个:javax.swing.text.html.HTMLEditorKit.Parser
如何使用此解析器提取页面中的重复信息?
举例来说,我在页面中重复了以下代码:
<tr>
<td class="info1">get this info</td>
<td class="info2">get this info</td>
<td class="info3">get this info</td>
</tr>
我可以有任何示例代码吗?
提前致谢。
它是一个流解析器,因此在解析时它会告诉您它命中了什么。你应该延长HTMLEditorKit.ParserCallback http://docs.oracle.com/javase/7/docs/api/javax/swing/text/html/parser/DocumentParser.html一些课程(我称之为Parser
),然后重写您关心的方法。
我相信它只适用于“swing 中的 html dtd”(请参阅here http://docs.oracle.com/javase/7/docs/api/javax/swing/text/html/parser/DocumentParser.html)。如果您正在做更复杂的事情,建议您使用外部 Java HTML 解析库,例如以下之一the ones https://stackoverflow.com/questions/26638/what-html-parsing-libraries-do-you-recommend-in-java我之前链接过。
这是基本代码(demo http://ideone.com/pC4dy):
import javax.swing.text.html.parser.*;
import javax.swing.text.html.*;
import javax.swing.text.*;
import java.io.*;
class Parser extends HTMLEditorKit.ParserCallback
{
private boolean inTD = false;
public void handleStartTag(HTML.Tag t, MutableAttributeSet a, int pos)
{
if(t.equals(HTML.Tag.TD))
{
inTD = true;
}
}
public void handleEndTag(HTML.Tag t, int pos)
{
if(t.equals(HTML.Tag.TD))
{
inTD = false;
}
}
public void handleText(char[] data, int pos)
{
if(inTD)
{
doSomethingWith(data);
}
}
public void doSomethingWith(char[] data)
{
System.out.println(data);
}
}
class HtmlTester
{
public static void main (String[] args) throws java.lang.Exception
{
ParserDelegator pd = new ParserDelegator();
pd.parse(new BufferedReader(new InputStreamReader(System.in)), new Parser(), false);
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)