解析HTML的网络爬虫
问题描述:
而且我先前的问题在这里:Extending a basic web crawler to filter status codes and HTML,我试图从HTML标记的信息,在这种情况下,“标题”,用下面的方法:解析HTML的网络爬虫
public static void parsePage() throws IOException, BadLocationException
{
HTMLEditorKit kit = new HTMLEditorKit();
HTMLDocument doc = (HTMLDocument) kit.createDefaultDocument();
doc.putProperty("IgnoreCharsetDirective", Boolean.TRUE);
Reader HTMLReader = new InputStreamReader(testURL.openConnection()
.getInputStream());
kit.read(HTMLReader, doc, 0);
// Create an iterator for all HTML tags.
ElementIterator it = new ElementIterator(doc);
Element elem;
while ((elem = it.next()) != null)
{
if (elem.getName().equals("title"))
{
System.out.println("found title tag");
}
}
}
这是工作至于告诉我它找到了标签。 我正在努力的是如何提取他们之后/之内包含的信息。
我在网站上发现了这个问题:Help with Java Swing HTML parsing,但它表示它只能使用格式良好的HTML。 我希望有另一种方式。
任何指针赞赏。
答
原来改变了方法,这种尝试会产生预期的结果:
{
HTMLEditorKit kit = new HTMLEditorKit();
HTMLDocument doc = (HTMLDocument) kit.createDefaultDocument();
doc.putProperty("IgnoreCharsetDirective", Boolean.TRUE);
Reader HTMLReader = new InputStreamReader(testURL.openConnection().getInputStream());
kit.read(HTMLReader, doc, 0);
String title = (String) doc.getProperty(Document.TitleProperty);
System.out.println(title);
}
我觉得我被关上野鹅与迭代器/元素的东西追逐。
答
使用Jodd
Jerry jerry = jerry().enableHtmlMode().parse(html);
...
Parser parser = new Parser(htmlInput);
CssSelectorNodeFilter cssFilter = new CssSelectorNodeFilter("title");
NodeList nodes = parser.parse(cssFilter);
谢谢阿列克谢。 有没有办法做到这一点,而不使用外部库? – Robert 2012-07-14 21:26:22
如果你需要一个快速而又脏乱的解决方案,你可以使用正则表达式来提取标题,但是,一般来说,避免使用正则表达式的HTML – 2012-07-14 21:28:24
是的,我注意到使用正则表达式来解析HTML是不受欢迎的。在这种情况下,我只需要“标题”信息。 – Robert 2012-07-14 21:40:27