Java Http Request仅返回我想要的某些元素

时间:2015-07-14 11:34:17

标签: java html http dom web-scraping

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

例如,如果我要请求名为<div>的{​​{1}},则响应将只是该元素,而不是页面上存在的其他绒毛,我不需要。

我查看的大多数方法都涉及获取整个HTML页面然后解析它。我想看一下这个页面,然后选择我想要的div,并将其作为回应。我正在处理的网页包含很多我想忽略的广告内容。

3 个答案:

答案 0 :(得分:2)

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

如果您使用自己实现的自定义服务器/ API来托管网页,则可以实现这一点。您可以发送一个请求,其中包含指定所需内容的某些参数,并且可以解析html页面服务器端。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

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

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

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

  1. 检索网页内容(包括协商编码,HTTP重定向和协议更改)。
  2. 清理未格式化的内容(例如,未封闭或不正确嵌套的代码,例如,使用JTidy)。
  3. 将页面内容解析为DOM。
  4. 遍历DOM以查找您感兴趣的节点(例如,通过DOM或XPath)。
  5. 构建输出DOM(例如,通过org.w3c.dom类)。
  6. 将输出DOM写入文件(java.ioorg.w3c.dom的组合)。
  7. 虽然可以从头开始实现,但已经有一些具有此功能的开源项目,请尝试类似jsoup: Java HTML Parser的内容。