我是新来的网络与Java刮(我相信这是正确的说法),并一直在努力寻找什么,我试图一个很好的教程:到Java的Web扫描到一个文本文件
我想在我创建的程序中有一个类,它扫描给定网站的所有数据并存储它。然后我可以在我的Main类中使用这些数据。
我在问有人用正确的方向指向我的最佳教程,或者有人能够解释我将如何编程。
我是新来的网络与Java刮(我相信这是正确的说法),并一直在努力寻找什么,我试图一个很好的教程:到Java的Web扫描到一个文本文件
我想在我创建的程序中有一个类,它扫描给定网站的所有数据并存储它。然后我可以在我的Main类中使用这些数据。
我在问有人用正确的方向指向我的最佳教程,或者有人能够解释我将如何编程。
好吧我会试着用另一种更好的方式回答这个问题。首先让我说,如果你不熟悉DOM解析或任何类型的文件解析,你可能会发现这很困难。
您需要做的第一件事就是将HTML转换为文档。使用JSoup,你可以这样做:
Document doc = Jsoup.connect("http://example.com")
.data("query", "Java")
.userAgent("Mozilla")
.cookie("auth", "token")
.timeout(3000)
.post();
现在你有一个名为“Doc”的文档。这个文档显然将完全像HTML一样结构化。为了“解析”这个文件,你将不得不做一些严肃的导航。不幸的是,没有神奇的“解析整个文档”代码。 (解析XML也是如此,请相信我,我只需解析超过100个节点的XML,这非常耗时)。
因此,如果您了解HTML的结构,那么浏览它将会非常有帮助。您可以考虑在“doc”上使用Print,这样您可以在继续之前真正看到HTML的外观。
一旦你知道了你的变量名称可以使用各种各样的方法,比如
getElementById(String id)
当然,你可以说保存到一个字符串。
在需要使用循环和ArrayLists的情况下,他们需要使用同一个名称的多个标签。
我不打算进一步深入这些方法,因为你只是真的要去练习。我知道使用XML解析器,我使用的过程是getTextContent(),但我不确定这是否适用于此。
下面是我如何使用DOM解析器解析XML文件的例子(注意,我用XPath导航我的文件,它可能不同于你如何做到这一点)
XPathExpression RfrdDocInfNbexpr = xpath.compile("//Ntfctn/Ntry/NtryDtls/TxDtls/RmtInf/Strd/RfrdDocInf/Nb");
Object RfrdDocInfNb = RfrdDocInfNbexpr.evaluate(doc, XPathConstants.NODESET);
NodeList nodesRfrdDocInfNb = (NodeList) RfrdDocInfNb;
for(int i = 0; i < nodesRfrdDocInfNb.getLength(); i++){
Element RfrdDocInfNbel = (Element) nodesRfrdDocInfNb.item(i);
RfrdDocInfNbS = Utilities.xmlToString(RfrdDocInfNbel);
int length = RfrdDocInfNbS.length();
RfrdDocInfNbS = RfrdDocInfNbS.substring(42,length);
length = RfrdDocInfNbS.length();
RfrdDocInfNbS = RfrdDocInfNbS.substring(0,length-5);
RfrdDocInfNbAL.add(RfrdDocInfNbS);
}
那么做我在那里?
XPathExpression RfrdDocInfNbexpr = xpath.compile("//Ntfctn/Ntry/NtryDtls/TxDtls/RmtInf/Strd/RfrdDocInf/Nb");
设置我想从中提取值的元素的路径(也称为节点)。
Object RfrdDocInfNb = RfrdDocInfNbexpr.evaluate(doc, XPathConstants.NODESET);
然后从中创建一个对象。
NodeList nodesRfrdDocInfNb = (NodeList) RfrdDocInfNb;
创建所有这些对象的列表。 (由于可能有多个标签名称相同,实际上在我的XML中每个标签有60个)。
Element RfrdDocInfNbel = (Element) nodesRfrdDocInfNb.item(i);
将我的节点变成一个元素。既然你使用HTML,你可能只能在这部分开始 - 获取元素是你的目标。
RfrdDocInfNbS = Utilities.xmlToString(RfrdDocInfNbel);
这很重要!这是如何将元素转换为字符串。这部分我遇到了很多麻烦,但将元素转换为String。由于你使用HTML显然不会工作,但重要的是你将不得不弄清楚如何将HTML元素转换为字符串。
所以这就是我如何使用解析器来浏览我的XML并将所有内容提取到ArrayLists和Strings中。我有很多这样的代码块。
如果你真的想进行这个项目,我建议在这里的JSoup网站上进行研究:http://jsoup.org/cookbook/extracting-data/dom-navigation。
再次,这是一个高级项目,所以不要指望在一天内理解这一点,除非您已经熟悉解析,否则我预计它至少需要一周的阅读和练习。
这对我来说更有意义,谢谢! – phoenix
http://stackoverflow.com/questions/2835505/how-to-scan-a-website-or-page-for-info-and-bring-it-into-my-program – user3520080
请先研究你的问题增加一个新的话题。这个问题几乎完全一样,之前已经被“user3520080”发布。 – jesric1029
@ jesric1029我在问之前看过这个问题,但很难理解从那里去哪里。但感谢您的反馈。 – phoenix