1

我根本找不到任何关于我需要为 Java 字符串执行的解析类型的文档。

所以,这不是像用行或逗号之类的解析那样简单,它有点复杂。

我的程序抓取网页的源代码,我需要解析它以获取视图标签的内容。

像解析它之间的东西

<input name="sid" type="hidden" value="

" />

所以,如果网页有这个字符串:

<input name="sid" type="hidden" value="stringvaluehere" />

它会输出

stringvaluehere

任何人都可以帮忙吗?我根本没有找到任何关于此类的文档,并且在其他来源处询问也无济于事。

谢谢!

4

4 回答 4

5

如果要解析 HTML,我建议使用 HTML 解析器而不是使用字符串操作。将文档解析为字符串只是在遇到意外的奇怪输入时提出问题。

这个问题对潜在的 Java HTML Parsers 进行了一些讨论:Java HTML Parsing

于 2012-12-12T00:57:59.917 回答
5

您可以为此使用库,例如​​ JSoup。它通常比尝试手动解析 DOM 容易得多。

Document doc = Jsoup.connect("http://www.example.com").get();
Elements inputs = doc.select("input#sid");
for(Element input : inputs) {
    System.out.println(input.attr("value"));
}

易于使用,重要的是易于阅读。

于 2012-12-12T01:00:44.217 回答
1

这有点笨拙,可能有一个非常酷和古怪的正则表达式可以做得更好,但是......

String value = "<input name=\"sid\" type=\"hidden\" value=\"stringvaluehere\" />";
value = value.substring(value.indexOf("value=\"") + "value=\"".length());
value = value.substring(0, value.indexOf("\""));
System.out.println(value);

印刷stringvaluehere

更新

另一种方法是让您将 HTML 文本视为 XML,并使用 XML 解析器来查找元素的属性。虽然听起来很复杂,但它是一个更简单的解决方案,尤其是当您倾向于解析多个网页时。

两个可能有帮助的解决方案是jsoupCobra

于 2012-12-12T00:58:17.093 回答
1

如果页面是格式良好的 XML,您可以为此目的使用 XPATH 查询语言。它比低级别正则表达式匹配更清洁。或一些现有的用于解析 HTML 的库。

于 2012-12-12T00:59:58.537 回答