【问题标题】:Java Http Request that only returns certain elements I want仅返回我想要的某些元素的 Java Http 请求
【发布时间】:2015-10-03 00:28:31
【问题描述】:

Java 中是否有一种方法可以向网页发出 HTTP 请求,其中响应只会是我想要的某些特定元素而不是整个文档?

例如,如果我要请求一个名为 "example"<div>,则响应将仅是该元素,而不是页面上存在的其余绒毛,我不需要。

我看过的大多数方法都涉及获取整个 HTML 页面,然后对其进行解析。我想查看该页面,然后只需取出我想要的 div 并仅将其作为响应。我正在处理的页面包含很多我想忽略的广告内容。

【问题讨论】:

    标签: java html http dom web-scraping


    【解决方案1】:

    这是不可能的。 Web 的工作方式是向页面发送 HTTP GET 请求,然后它返回整个页面。你用它做什么(解析等)取决于你,但你对 HTTP 协议没有影响。

    但是,如果您使用自己实现的自定义服务器/API 托管网页,则可以实现这一点。您可以发送带有特定参数的请求,指定您需要的内容,它可以解析 html 页面服务器端。

    【讨论】:

    • 好的,我明白了。所以说真的,如果不重写 HTTP 的工作原理,这是不可能的。
    【解决方案2】:

    不,这是不可能的。 HTTP Get/post 调用将返回完整的网页信息,但不返回其中的一部分。

    【讨论】:

      【解决方案3】:

      HTTP 与页面内容无关,它只是一个管理服务器请求和响应的协议。

      我明白你想要做什么,你只是问了一个稍微错误的问题。不用担心 HTTP,它只是管理服务器请求和响应(GET、PUT、POST、HEAD、OPTIONS)的协议。

      您描述的问题只有在内容检索完成后才能处理。您需要使用作为XMLXHTML 基础的文档对象模型(DOM)。这意味着您需要熟悉DOM,也许还需要熟悉XPathXSL

      您要求的功能可以通过多种方式实现,但通常归结为一系列重要的操作:

      1. 检索 URL 的页面内容(包括协商编码、HTTP 重定向和协议更改)。
      2. 清理格式不正确的内容(即未封闭或嵌套不当的标签,例如使用JTidy)。
      3. 将页面内容解析为 DOM。
      4. 遍历 DOM 以找到您感兴趣的节点(例如,通过 DOM 或 XPath)。
      5. 构建输出 DOM(例如,通过 org.w3c.dom 类)。
      6. 将输出 DOM 写入文件(java.ioorg.w3c.dom 的组合)。

      虽然可以从头开始实现此功能,但已经有一些开源项目具有此功能,请尝试jsoup: Java HTML Parser

      【讨论】:

        猜你喜欢
        • 2017-04-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多