zoukankan      html  css  js  c++  java
  • JAVA分析html算法(JAVA网页蜘蛛算法)

       近来有些朋友在做蜘蛛算法,或者在网页上面做深度的数据挖掘。但是遇到复杂而繁琐的html页面大家都望而却步。因为很难获取到相应的数据。

       最古老的办法的是尝试用正则表达式,估计那么繁琐的东西得不偿失,浪费我们宝贵的时间。

       第二个办法用开源组织htmlparser的包,这个是一个比较老的项目,但是效果估计不是很好,好像不可以深入分析html,只能分析5级的结构;

       我这里有个htmlparser的源代码,可以获取所有的超链接的

    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
    package test;
    
    import java.util.HashMap;
    import java.util.Map;
    
    import org.htmlparser.Node;
    import org.htmlparser.NodeFilter;
    import org.htmlparser.Parser;
    import org.htmlparser.tags.LinkTag;
    import org.htmlparser.util.NodeList;
    
    /**
     *
     * @author Arjick@163.com
     */
    public class GetLinkTest {
    
        public static void main(String[] args) {
    
            try {
                // 通过过滤器过滤出<A>标签
                Parser parser = new Parser("http://www.lovezan.com");
                NodeList nodeList = parser.extractAllNodesThatMatch(new NodeFilter() {
                    // 实现该方法,用以过滤标签
                    public boolean accept(Node node) {
                        if (node instanceof LinkTag)// 标记
                        {
                            return true;
                        }
                        return false;
                    }
                });
                // 打印
                for (int i = 0; i < nodeList.size(); i++) {
                    LinkTag n = (LinkTag) nodeList.elementAt(i);
                    //System.out.print(n.getStringText() + " ==>> ");
                    //System.out.println(n.extractLink());
                    try {
                        if (n.extractLink().equals("http://www.zuzwn.com")) {
                            System.out.println(n.extractLink());
                        }
                    } catch (Exception e) {
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
    
        }
    }

    第三个办法,也是我现在一直在用的办法,首先把html清理为xml,然后用java解析xml获取数据,现在上传一个java clean html的源代码:

    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
    package exec;
    
    import java.io.File;
    import java.io.IOException;
    import org.htmlcleaner.CleanerProperties;
    import org.htmlcleaner.HtmlCleaner;
    import org.htmlcleaner.PrettyXmlSerializer;
    import org.htmlcleaner.TagNode;
    
    /**
     *
     */
    public class HtmlClean {
    
        public void cleanHtml(String htmlurl, String xmlurl) {
            try {
                long start = System.currentTimeMillis();
    
                HtmlCleaner cleaner = new HtmlCleaner();
                CleanerProperties props = cleaner.getProperties();
                props.setUseCdataForScriptAndStyle(true);
                props.setRecognizeUnicodeChars(true);
                props.setUseEmptyElementTags(true);
                props.setAdvancedXmlEscape(true);
                props.setTranslateSpecialEntities(true);
                props.setBooleanAttributeValues("empty");
    
                TagNode node = cleaner.clean(new File(htmlurl));
    
                System.out.println("vreme:" + (System.currentTimeMillis() - start));
    
                new PrettyXmlSerializer(props).writeXmlToFile(node, xmlurl);
    
                System.out.println("vreme:" + (System.currentTimeMillis() - start));
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    
  • 相关阅读:
    STM32关于多线程运行的疑问
    流量校准仪开发日志
    来自一位十余年工作经验的老电子工程师的心里话:该出手时便出手!
    什么是开尔文连接
    node.js
    锂电池充电合集
    UICollectionView 使用 介绍
    UICollectionView 讲解
    sourcetree帮助文档
    使用 Git + Dropbox + SourceTree 做 Source Code Management
  • 原文地址:https://www.cnblogs.com/zuzwn/p/3602386.html
Copyright © 2011-2022 走看看