HTMLParser 在分析网页的时候有两种方式,一种是Visitor方式另外一种是Filter方式。
在这里我们看看使用filter分析网页信息的方法。
使用Filter方式访问网页,目的就是提取网页上的节点。在这里我们就可以使用HasAttributeFilter来进行分析。例如,我们要在百度上查询www.javaeerun.com的收录情况,那么根据上一篇文章 简单收录查询工具的原理 我们知道了要访问的URL和需要获取的节点,那么接下来就以此为例。
有这么几步是固定的:
Parser parser = new Parser((HttpURLConnection) new URL(url).openConnection());
NodeFilter filter = new HasAttributeFilter(attrName, attrValue);
NodeList nodeList = parser.extractAllNodesThatMatch(filter);
这样我们就已经获得了具有attrName=attrValue的NodeList了,接下来就是对Node的处理了
代码如下:
package com.javaeerun.demo.HTMLparserdemo.filter; import java.io.IOException; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import org.htmlparser.Node; import org.htmlparser.NodeFilter; import org.htmlparser.Parser; import org.htmlparser.filters.HasAttributeFilter; import org.htmlparser.util.NodeList; import org.htmlparser.util.ParserException; public class HasAttributeFilterDemo { public static void main(String[] args) { try { Parser parser = new Parser( (HttpURLConnection) new URL("http://www.baidu.com/s?" + "wd=site%3Awww.javaeerun.com"). openConnection()); parser.setEncoding("GBK"); NodeFilter filter = new HasAttributeFilter("class", "nums"); NodeList nodeList = parser.extractAllNodesThatMatch(filter); if (nodeList != null && nodeList.size() > 0) { Node node = nodeList.elementAt(0); // 获取class="nums"的span System.out.println(node.toHtml()); NodeList nl = node.getChildren(); Node textNode = nl.elementAt(0); // 获取Text节点 System.out.println(textNode.getText()); } } catch (ParserException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
这样,我们就获得了这样的结果:
百度为您找到相关结果N个
这里的N是数字,具有xxx,xxx,xxx的格式。我们要做的处理就是把这个字符串当中非数字部分全部去掉然后拼接起来就可以了,这里就不做演示了。
相关推荐
- 过滤器:HTMLParser支持使用过滤器(`NodeFilter`)来定位特定类型的节点,如`TagNameFilter`、`HasAttributeFilter`、`HasChildFilter`等。 - 提取匹配的节点:`extractAllNodesThatMatch(filter)`方法会返回...
通过创建URL对象,然后打开与该URL对应的连接,设置适当的请求头,如编码方式(这里设为UTF-8)。 3. **Parser对象**:使用HtmlParser库,我们创建一个`Parser`对象,传入HTTP连接获取的输入流。这将构建一个表示...
在Web抓取或数据分析场景中,`HtmlParser`是处理网页资源的关键组件。以下是对`HtmlParser`的详细解释及其在获取网页资源中的应用: 1. **基本概念** `HtmlParser`是一个解析器库,它能够读取HTML源码并将其转换...
在示例代码中,我们需要`org.htmlparser`下的多个类,如`Parser`、`AndFilter`、`TagNameFilter`、`HasAttributeFilter`、`NodeList`等。导入这些包后,你可以开始编写解析代码。 ```java import org.htmlparser....
ParserFeedback的代码很简单,是针对调试和跟踪分析过程的,一般不需要改变。而使用Lexer???? 3.3.2HtmlPaser使用Node对象保存各节点信息 (1)访问各个节点的方法 Node getParent ():取得父节点 NodeList ...