2016-02-12 61 views
-2

我是新来的网络与Java刮(我相信这是正确的说法),并一直在努力寻找什么,我试图一个很好的教程:到Java的Web扫描到一个文本文件

我想在我创建的程序中有一个类,它扫描给定网站的所有数据并存储它。然后我可以在我的Main类中使用这些数据。

我在问有人用正确的方向指向我的最佳教程,或者有人能够解释我将如何编程。

+2

http://stackoverflow.com/questions/2835505/how-to-scan-a-website-or-page-for-info-and-bring-it-into-my-program – user3520080

+0

请先研究你的问题增加一个新的话题。这个问题几乎完全一样,之前已经被“user3520080”发布。 – jesric1029

+0

@ jesric1029我在问之前看过这个问题,但很难理解从那里去哪里。但感谢您的反馈。 – phoenix

回答

0

好吧我会试着用另一种更好的方式回答这个问题。首先让我说,如果你不熟悉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

再次,这是一个高级项目,所以不要指望在一天内理解这一点,除非您已经熟悉解析,否则我预计它至少需要一周的阅读和练习。

+0

这对我来说更有意义,谢谢! – phoenix