`
gcgmh
  • 浏览: 355188 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

htmlparser 精确提取的一些代码

阅读更多
一、
ConnectionManager manager = Page.getConnectionManager();
		Parser parser = new Parser(manager
				.openConnection("http://www.verycd.com/topics/2760827/"));
		parser.setEncoding("GBK");
		
		//提取a标签里的img图片链接
//		NodeFilter filter = new AndFilter(new TagNameFilter("a"),
//				new HasChildFilter(new TagNameFilter("img")));
//		NodeFilter filter = new TagNameFilter("title");
		
		//提取input里面的东西
		NodeFilter filter = new AndFilter(new TagNameFilter("input"),
				new HasAttributeFilter("class","forminput"));
		
//		NodeList nodeList = parser.parse(filter);
		
		NodeList nodeList = parser.extractAllNodesThatMatch(filter);
		
		NodeIterator it = nodeList.elements();
		while (it.hasMoreNodes()) {
			Node node = it.nextNode();
			System.out.println(node.toHtml());
		}
	}


二、
// 获取一个网页上所有的链接和图片链接
  public static void extracLinks(String url) {
    try {
      Parser parser = new Parser(url);
      parser.setEncoding("gb2312");
//过滤 <frame> 标签的 filter,用来提取 frame 标签里的 src 属性所、表示的链接
      NodeFilter frameFilter = new NodeFilter() {
        public boolean accept(Node node) {
          if (node.getText().startsWith("frame src=")) {
            return true;
          } else {
            return false;
          }
        }
      };
//OrFilter 来设置过滤 <a> 标签,<img> 标签和 <frame> 标签,三个标签是 or 的关系
   OrFilte rorFilter = new OrFilter(new NodeClassFilter(LinkTag.class), new
NodeClassFilter(ImageTag.class));
   OrFilter linkFilter = new OrFilter(orFilter, frameFilter);
  //得到所有经过过滤的标签
  NodeList list = parser.extractAllNodesThatMatch(linkFilter);
  for (int i = 0; i < list.size(); i++) {
    Node tag = list.elementAt(i);
    if (tag instanceof LinkTag)//<a> 标签
    {
      LinkTag link = (LinkTag) tag;
      String linkUrl = link.getLink();//url
      String text = link.getLinkText();//链接文字
      System.out.println(linkUrl + "**********" + text);
    }
    else if (tag instanceof ImageTag)//<img> 标签
    {
      ImageTag image = (ImageTag) list.elementAt(i);
      System.out.print(image.getImageURL() + "********");//图片地址
      System.out.println(image.getText());//图片文字
    }
    else//<frame> 标签
    {
//提取 frame 里 src 属性的链接如 <frame src="test.html"/>
      String frame = tag.getText();
      int start = frame.indexOf("src=");
      frame = frame.substring(start);
      int end = frame.indexOf(" ");
      if (end == -1)
        end = frame.indexOf(">");
      frame = frame.substring(5, end - 1);
      System.out.println(frame);
    }
  }
} catch (ParserException e) {
      e.printStackTrace();
}
}


三、
	public void test2() throws ParserException{
		ConnectionManager manager = Page.getConnectionManager();
		Parser parser = new Parser(manager.openConnection("http://www.verycd.com/sto/datum/computer/page1"));
		//提取A标签,他有一个父标签为H3
		NodeFilter filter = new AndFilter(new TagNameFilter("a"),new HasParentFilter(new TagNameFilter("h3")));
		
		NodeList nodes = parser.parse(filter);
		NodeIterator it = nodes.elements();
		while (it.hasMoreNodes()) {
			Node node = it.nextNode(); //可以在此用debug查看node节点是什么类型的,然后在转换成具体类型来提取想要的数据!
			if (node instanceof LinkTag) {	//转换
				LinkTag linkNode = (LinkTag) node;
				System.out.println("http://www.verycd.com"+linkNode.getAttribute("href"));
			}
		}
		
	}


四、
	ConnectionManager manager = Page.getConnectionManager();
		Parser parser = new Parser(manager.openConnection("http://huodong.sodao.com/39/info#"));
		
		NodeFilter filter = new StringFilter("减价幅度");  //用了StringFilter,可以立即提取出所在的text节点
		
		NodeList nodes = parser.parse(filter);
		NodeIterator it = nodes.elements();
		while (it.hasMoreNodes()) {
			Node node = it.nextNode(); //可以在此用debug查看node节点是什么类型的,然后在转换成具体类型来提取想要的数据!
			
			System.out.println(node.getParent().toHtml());	//通过indexof方法提取想要的text


五、
/**
 * 用htmlparser提取图片的几种方法
 */
public class Test {
	
	static Parser parser = new Parser();
	
	public static void test1(String url) throws ParserException{
		
		Parser parser = new Parser();
		parser.setURL(url);
		parser.setEncoding("GBK");
		
		//第一种方法
		NodeFilter imageFilter = new NodeFilter() {
			   public boolean accept(Node node) {
			    return (node instanceof ImageTag);
			   }  
		};
		
		NodeList images = parser.extractAllNodesThatMatch(imageFilter);
		
//		第二种方法
//		NodeFilter imageFilter = new TagNameFilter("img");
		//第三种方法
//		NodeFilter imageFilter = new NodeClassFilter(ImageTag.class);
//		NodeList images = parser.parse(imageFilter);
		
		System.out.println("Size: " + images.size());
		
		for(NodeIterator it = images.elements(); it.hasMoreNodes();){
			ImageTag node = (ImageTag) it.nextNode();
			
			System.out.println(node.getAttribute("src"));
		}
		
		
	}
	
	public static void test2(String url) throws ParserException {
		Parser parser = new Parser();
		parser.setURL(url);
		parser.setEncoding("GBK");
		
		NodeFilter divFilter = new AndFilter(new TagNameFilter("div"),new HasAttributeFilter("id","text_content"));
		NodeList divs = parser.parse(divFilter);
		System.out.println(removeTag(divs.elementAt(0).toHtml()));
	}
	


	public static String removeTag(String content) {

		if (null != content && !"".equals(content.trim())) {
		
			while (content.indexOf("<") >=0 && content.indexOf(">") >= 0) {
				int i = content.indexOf("<");
				int j = content.indexOf(">");
				if (i < j) {
					String contetn1 = content.substring(0, i);
					String content2 = content.substring(j + 1,
							content.length() );
					content = contetn1 + content2;
				} 
			}
			
		}
		return content;
	}
	
	public static void main(String[] args) throws ParserException {
		String url = "http://news.dayoo.com/china/200908/11/53868_10386441.htm";
		Test.test2(url);
	}

}

=====================================================================
/** *//**
     * 分别读纯文本和链接.
     * @param result 网页的内容
     * @throws Exception
     */
    public static void readTextAndLinkAndTitle(String result) throws Exception {
        Parser parser;
        NodeList nodelist;
        parser = Parser.createParser(result, "utf8");
        NodeFilter textFilter = new NodeClassFilter(TextNode.class);
        NodeFilter linkFilter = new NodeClassFilter(LinkTag.class);
        NodeFilter titleFilter = new NodeClassFilter(TitleTag.class);
        OrFilter lastFilter = new OrFilter();
        lastFilter.setPredicates(new NodeFilter[] { textFilter, linkFilter, titleFilter });
        nodelist = parser.parse(lastFilter);
        Node[] nodes = nodelist.toNodeArray();
        String line = "";
       
        for (int i = 0; i < nodes.length; i++) {
            Node node = nodes[i];
            if (node instanceof TextNode) {
                TextNode textnode = (TextNode) node;
                line = textnode.getText();
            } else if (node instanceof LinkTag) {
                LinkTag link = (LinkTag) node;
                line = link.getLink();
            } else if (node instanceof TitleTag) {
                TitleTag titlenode = (TitleTag) node;
                line = titlenode.getTitle();
            }
           
            if (isTrimEmpty(line))
                continue;
            System.out.println(line);
        }
    }



六、
/** 
     * @author rrong_m 
     * @throws ParserException 
     */ 
    public static void getWords(String url) throws ParserException { 
        Parser parser = new Parser(url); 
        NodeFilter filter = new HasAttributeFilter("id", "word_more_con"); 
        NodeList nodelist = parser.extractAllNodesThatMatch(filter); 
        NodeFilter filter1 = new NodeClassFilter(LinkTag.class); 
        nodelist = nodelist.extractAllNodesThatMatch(filter1, true); 
        for (int i = 0; i < nodelist.size(); i++) { 
            LinkTag link = (LinkTag) nodelist.elementAt(i); 
            System.out.println(link.getLinkText() + ":" + link.getLink()); 
        } 
    } 

七、处理html里面的table
public List getChangyu(String id) throws HttpException, IOException, ParserException 
    { 
        HttpClient hc=new HttpClient(); 
        hc.getParams().setContentCharset("gb2312"); 
        PostMethod pm=new PostMethod("http://61.145.121.47/custSearch.jsp"); 
        pm.setParameter("bnos","111111111111"); 
        hc.executeMethod(pm); 
        String temp=pm.getResponseBodyAsString(50000);//设置获取html代码的数量,否则会报错,过大 
        //System.out.print(temp); 
        Parser parser=new Parser(temp); 
        NodeFilter filter=new HasAttributeFilter("cellpadding","-1"); 
        NodeList nodelist=parser.extractAllNodesThatMatch(filter); 
         
        if(nodelist.size()>0) 
        { 
            NodeFilter filter1=new NodeClassFilter(TableTag.class); 
            nodelist=nodelist.extractAllNodesThatMatch(filter1,true); 
            if(nodelist.size()>0) 
            { 
                TableTag table=(TableTag) nodelist.elementAt(0); 
                TableRow [] rows=table.getRows(); 
                if(rows.length>1) 
                { 
                    for(int i=2;i<rows.length;i++) 
                    { 
                        TableRow row=rows[i]; 
                        TableColumn td=row.getColumns()[0]; 
                        TableColumn td1=row.getColumns()[1]; 
                        System.out.println(td.toPlainTextString()+" "+td1.toPlainTextString()); 
                    } 
                } 
            } 
        } 
        else 
        { 
             
        } 
        return null; 
    } 


八、查询IP
    public static void getIp(String ip) throws ParserException 
    { 
        String url="http://www.ip138.com/ips.asp?ip="+ip; 
        Parser parser=new Parser(url); 
        parser.setEncoding("gb2312");//设置编码否则得到的是乱码51jsp.cn 
        NodeList nodelist=null; 
        NodeFilter filter=new HasAttributeFilter("class","ul1");//定义过滤51jsp.cn 
        nodelist=parser.extractAllNodesThatMatch(filter); 
        if(nodelist.size()>0) 
        { 
            System.out.println("您查询的IP为:"+ip); 
            System.out.println(nodelist.elementAt(0).toPlainTextString()); 
        } 
         
    } 
    public static void main(String[] args) throws ParserException { 
        getIp("125.33.192.180"); 
    } 
 
}


九、提取html里面的p标签里面的内容
public static ArrayList <String> getParagraphList( String content){
		
		ArrayList <String> paraList=new ArrayList <String>();
		
		Parser myParser=new Parser();
        NodeList nodeList = null;
     
        NodeFilter paraFilter = new NodeClassFilter(ParagraphTag.class);
        try {
        	
        	myParser.setInputHTML(content);
            nodeList = myParser.parse(paraFilter);
            for (int i = 0; i <= nodeList.size(); i++) {
                
             ParagraphTag tag = (ParagraphTag) nodeList.elementAt(i);
             
             if(tag!=null){
	          //   System.out.println(tag.getStringText());
	           //  System.out.println("***********************************");
	             paraList.add(tag.getStringText());
             }    

            } 

        } catch (ParserException e) {
            e.printStackTrace();
        }
	
		return paraList;
				
	}
分享到:
评论

相关推荐

    HtmlParser.Net Community Edition ersion 1.8.0

    使用HtmlParser.Net,你可以轻松地从HTML中提取数据,例如网页上的表格信息、链接、图片地址等。这对于网络爬虫、数据分析或者自动化测试场景非常有用。此外,由于其对HTML的精确解析,HtmlParser.Net也可以用于清理...

    htmlparser2.0_dll+htmlparserAPI

    `htmlparser.dll`和`htmllexer.dll`就是实现这些功能的关键组件,它们负责读取HTML源代码,将其转化为可操作的数据结构。 `HTMLParser-2[1].0-API.CHM`文件是HTMLParser2.0的API参考手册,它包含了详细的API文档,...

    HTMLParser抽取Web网页正文信息.doc

    在实际应用中,HTMLParser不仅能够处理标准的HTML文档,还能容忍一些常见的HTML语法错误,使得数据提取过程更加稳定和高效。 #### 二、下载与配置HTMLParser 要使用HTMLParser,首先需要从官方网站...

    HtmlParser笔记

    - "HtmlParser和HttpClient实现网络爬虫.doc":详细介绍了如何结合这两个库构建网络爬虫的步骤和示例代码。 - "HtmlParser使用详解.doc":深入讲解HtmlParser的各个方面,包括配置、事件处理器的编写、错误处理等。 ...

    node-htmlparser.zip

    它通过事件驱动的方式,允许开发者精确控制HTML解析过程,从而实现各种数据提取、转换和操作。无论你是构建Web爬虫、处理用户输入的HTML,还是进行其他需要解析HTML的项目,node-htmlparser都是一个值得信赖的工具。

    基于HTMLParser的Web信息抽取系统的设计与实现

    基于HTMLParser的Web信息抽取系统的设计与实现,是一项旨在从网页中自动提取特定信息的技术方案。随着互联网信息的爆炸性增长,如何从海量数据中快速定位到有价值的信息成为了一个亟待解决的问题。传统的HTML页面...

    Winista.Text.HtmlParser采集南京价格信息网

    Winista.Text.HtmlParser是一款针对HTML文档解析的开源库,它提供了一种简洁且强大的API,使得开发者能够方便地从HTML页面中提取所需的数据。该组件对于处理网页结构化数据,尤其是面对复杂的网页布局和动态加载内容...

    HtmlParser2003 应用

    3. **正则表达式结合**:`HtmlParser2003`与正则表达式结合使用,可以更精确地匹配和提取特定格式的数据。 4. **扩展性**:`HtmlParser2003`可以与其他库(如JavaScript解析库)结合,处理动态加载的内容。 六、...

    Winista.HTMLParser.dll

    例如,可以利用它提供的方法查找特定的标签、属性,或者执行XPath查询,以获取精确的数据。 总的来说,Winista.HTMLParser.dll作为一款开源的HTML解析类库,凭借其强大的解析能力和开源特性,为开发者提供了便利的...

    htmlparser实现爬虫.doc

    为了实现更复杂的爬虫,你可能需要添加额外的功能,比如错误处理、重试机制、URL队列、多线程下载、以及对CSS选择器的支持,以便更精确地定位和提取数据。此外,你还可以考虑使用HTMLParser与其他库(如Jsoup)结合...

    基于htmlparser爬虫示例(图片).rar

    在Java代码中,我们需要创建一个继承自HTMLParser的类,并重写其方法,如startElement()、endElement()等,来处理这些事件。 下面是一些关键步骤: 1. **初始化HTMLParser**:首先,需要实例化HTMLParser对象,...

    彻底 HtmlParser 重写的两个类文件,直接放在目录下面或者大宝到jar里面可以用

    `HtmlParser`通常提供一种方法来解析HTML源代码,将其转换为DOM(Document Object Model)树形结构,用户可以通过这个结构轻松地遍历和提取所需的信息。然而,当HTML文档编码与预期的编码不一致时,就可能出现乱码...

    JAVA上百实例源码以及开源项目源代码

    Java从网络取得文件 1个目标文件 简单 Java从压缩包中提取文件 1个目标文件 简单 Java存储与读取对象 1个目标文件 如题 Java调色板面板源代码 1个目标文件 摘要:Java源码,窗体界面,调色板 使用Java语言编写的一款...

    Java开发:实现网站信息批量析取

    - **正则表达式**:通过正则表达式可以精确匹配和提取所需的文本内容。 - **字符串分割**:根据特定的分隔符来分割字符串,然后从中挑选有用的部分。 ##### 3. 多线程并发处理 为了提高批量处理的速度,可以采用多...

    C#搜索引擎开发解析HTML的两种方法.doc

    这段代码下载了一个网页并提取了所有链接(href属性)。尽管正则表达式可以快速匹配简单的HTML结构,但它对复杂的HTML布局和嵌套标签可能处理不佳,而且对于CSS选择器和DOM操作支持有限。 第二种方法是使用第三方库...

    解析得到除去标签的txt内容

    在给定的描述和代码中,我们关注的核心知识点是使用`HTMLParser`库来解析HTML文档并提取文本内容。`HTMLParser`是一个Java库,它允许开发者解析、遍历和修改HTML文档。在这个例子中,它被用来从HTML文档中提取特定...

    java爬取工具httpunit全部jar包(包含httpunit使用需要的全部jar包)

    在Java代码中,你可以通过以下方式初始化HttpUnit并发送请求: ```java import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache....

    AdvancedHTMLParser-6.1.0-py2-none-any.whl.zip

    一旦安装成功,你就可以在Python代码中导入AdvancedHTMLParser库并开始使用了。库的核心类是`HTMLParser`,它提供了丰富的API来解析HTML文档。例如,你可以通过创建一个解析器实例,然后调用`parse`方法来解析HTML...

    massnerder-blog-xpath-metadata-extraction

    8. **代码组织**:在"massnerder-blog-xpath-metadata-extraction-master"项目中,可能包含了模块化代码和功能函数,用于批量处理多篇文章的元数据提取,可能包括解析XML/HTML、定义XPath表达式、存储和展示结果等...

Global site tag (gtag.js) - Google Analytics