精华内容
下载资源
问答
  • 使用java解析CSS文件

    2019-08-13 01:10:34
    NULL 博文链接:https://huiyanlihao.iteye.com/blog/2295436
  • java解析css文件工具类CssParserUtil.java

    千次阅读 2016-12-28 14:11:43
    CSS Parser 是一个用Java编写的用来解析 CSS解析库 项目源码路径:svn://svn.code.sf.net/p/cssparser/code/trunk/cssparser 在实际项目开发中,只需如引入cssparser-0.9.20.jar即可 maven依赖:    ...

    CSS Parser 是一个用Java编写的用来解析 CSS 的解析库

    项目源码路径:svn://svn.code.sf.net/p/cssparser/code/trunk/cssparser

    在实际项目开发中,只需如引入cssparser-0.9.20.jar即可

    maven依赖:

           <dependency>
                <groupId>net.sourceforge.cssparser</groupId>
                <artifactId>cssparser</artifactId>
                <version>0.9.20</version>
            </dependency>


    自己写的工具类:CssParserUtil.java

    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.HttpURLConnection;
    import java.net.URL;

    import org.apache.log4j.Logger;
    import org.w3c.css.sac.InputSource;
    import org.w3c.dom.css.CSSRule;
    import org.w3c.dom.css.CSSRuleList;
    import org.w3c.dom.css.CSSStyleDeclaration;
    import org.w3c.dom.css.CSSStyleRule;
    import org.w3c.dom.css.CSSStyleSheet;

    import com.steadystate.css.parser.CSSOMParser;
        
    public class CssParserUtil {
        private final static Logger log = Logger.getLogger(CssParserUtil.class);
        /**
         * 打印样式文件内容
         * @param filePath 样式本地文件路径
         * @param selectorText  属性名称
         * @return
         */
        public static boolean showCssText(InputStream inStream){
            try {
                InputSource source = new InputSource();
                source.setByteStream(inStream);
                source.setEncoding("UTF-8");
                final CSSOMParser parser = new CSSOMParser();
                CSSStyleSheet sheet = parser.parseStyleSheet(source, null, null);
                CSSRuleList rules = sheet.getCssRules();
                if(rules.getLength() == 0 ){
                    return false;
                }
                
                for (int i = 0; i < rules.getLength(); i++) {
                    final CSSRule rule = rules.item(i);
                    //获取样式名称
                    String selectorText_ = ((CSSStyleRule) rule).getSelectorText();
                    //获取样式内容
                    String cssText = ((CSSStyleRule)rule).getCssText();
                    System.out.println(cssText);
                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                log.error("showCssText***************************************"+e.getMessage());
                return false;
            }
             return false;
        }
        /**
         * 检查样式属性是否存在
         * @param filePath 样式本地文件路径
         * @param selectorText  属性名称
         * @return
         */
        public static boolean checkSelectorText(InputStream inStream,String selectorText){
            try {
                InputSource source = new InputSource();
                source.setByteStream(inStream);
                source.setEncoding("UTF-8");
                final CSSOMParser parser = new CSSOMParser();
                CSSStyleSheet sheet = parser.parseStyleSheet(source, null, null);
                CSSRuleList rules = sheet.getCssRules();
                if(rules.getLength() == 0 ){
                    return false;
                }
                
                for (int i = 0; i < rules.getLength(); i++) {
                    final CSSRule rule = rules.item(i);
                    //获取样式名称
                    String selectorText_ = ((CSSStyleRule) rule).getSelectorText();
                    //获取样式内容
                    String cssText = ((CSSStyleRule)rule).getCssText();
                    
                    if(selectorText.equals(selectorText_)){
                        return true;
                    }
                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                log.error("checkSelectorText***************************************"+e.getMessage());
                return false;
            }
             return false;
        }
        /**
         * 查询样式文件中选择器名称下面的属性是否存在
         * @param inStream css文件输入流
         * @param selectorText 选择器名称
         * @param property  属性名称
         * @return
         */
        public static boolean checkCssProperty(InputStream inStream,String selectorText,String property){
            try {
                InputSource source = new InputSource();
                source.setByteStream(inStream);
                source.setEncoding("UTF-8");
                final CSSOMParser parser = new CSSOMParser();
                CSSStyleSheet sheet = parser.parseStyleSheet(source, null, null);
                CSSRuleList rules = sheet.getCssRules();
                if(rules.getLength() == 0 ){
                    return false;
                }
                for (int i = 0; i < rules.getLength(); i++) {
                    final CSSRule rule = rules.item(i);
                    //获取选择器名称
                    String selectorText_ = ((CSSStyleRule) rule).getSelectorText();
                    //获取样式内容
                    String cssText = ((CSSStyleRule)rule).getCssText();
                    
                    if(selectorText.equals(selectorText_)){
                        CSSStyleDeclaration ss =  ((CSSStyleRule)rule).getStyle();
                        String propertyValue = ss.getPropertyValue(property);
                        if("".equals(propertyValue) || propertyValue == null){
                            return false;
                        }
                        return true;
                    }
                }
            } catch (Exception e) {
                // TODO: handle exception
                e.printStackTrace();
                log.error("checkCssProperty***************************************"+e.getMessage());
                return false;
            }
            return false;
        }
        
        /**
         * 添加新样式
         * @param inStream css文件输入流
         * @param selectorText 选择器名称
         * @param property  属性名称
         * @return
         */
        public static CSSStyleSheet insertRule(InputStream inStream,String rule){
            CSSStyleSheet sheet = null;
            try {
                InputSource source = new InputSource();
                source.setByteStream(inStream);
                source.setEncoding("UTF-8");
                final CSSOMParser parser = new CSSOMParser();
                sheet = parser.parseStyleSheet(source, null, null);
                CSSRuleList rules = sheet.getCssRules();
                if(rules.getLength() == 0 ){
                    return null;
                }
                sheet.insertRule(rule, rules.getLength());
            } catch (Exception e) {
                // TODO: handle exception
                e.printStackTrace();
                log.error("insertRule***************************************"+e.getMessage());
                return null;
            }
            return sheet;
        }
        /**
         * 更新选择器样式
         * @param inStream css文件输入流
         * @param selectorText 选择器名称
         * @param property  属性名称
         * @return
         */
        public static CSSStyleSheet updateRule(InputStream inStream,String selectorText,String ruleText){
            CSSStyleSheet sheet = null;
            try {
                InputSource source = new InputSource();
                source.setByteStream(inStream);
                source.setEncoding("UTF-8");
                final CSSOMParser parser = new CSSOMParser();
                sheet = parser.parseStyleSheet(source, null, null);
                CSSRuleList rules = sheet.getCssRules();
                if(rules.getLength() == 0 ){
                    return null;
                }
                for (int i = 0; i < rules.getLength(); i++) {
                    final CSSRule rule = rules.item(i);
                    //获取选择器名称
                    String selectorText_ = ((CSSStyleRule) rule).getSelectorText();
                    //获取样式内容
                    String cssText = ((CSSStyleRule)rule).getCssText();
                    if(selectorText.equals(selectorText_)){
                        ((CSSStyleRule)rule).getStyle().setCssText(ruleText);
                    }
                }
            } catch (Exception e) {
                // TODO: handle exception
                e.printStackTrace();
                log.error("updateRule***************************************"+e.getMessage());
                return null;
            }
            return sheet;
        }
        /**
         * 删除选择器样式
         * @param inStream css文件输入流
         * @param selectorText 选择器名称
         * @param property  属性名称
         * @return
         */
        public static CSSStyleSheet deleteRule(InputStream inStream,String selectorText){
            CSSStyleSheet sheet = null;
            try {
                InputSource source = new InputSource();
                source.setByteStream(inStream);
                source.setEncoding("UTF-8");
                final CSSOMParser parser = new CSSOMParser();
                sheet = parser.parseStyleSheet(source, null, null);
                CSSRuleList rules = sheet.getCssRules();
                if(rules.getLength() == 0 ){
                    return null;
                }
                for (int i = 0; i < rules.getLength(); i++) {
                    final CSSRule rule = rules.item(i);
                    //获取选择器名称
                    String selectorText_ = ((CSSStyleRule) rule).getSelectorText();
                    //获取样式内容
                    String cssText = ((CSSStyleRule)rule).getCssText();
                    
                    if(selectorText.equals(selectorText_)){
                        sheet.deleteRule(i);
                    }
                }
            } catch (Exception e) {
                // TODO: handle exception
                e.printStackTrace();
                log.error("deleteRule***************************************"+e.getMessage());
                return null;
            }
            return sheet;
        }
        /**
         * 添加或者更新选择器属性
         * @param inStream  文件输入流
         * @param selectorText 选择器名称
         * @param propertyName 添加或者更新的属性名称
         * @param propertyValue 属性值
         * @param priority  优先级   例如 "important",或者空
         * @return
         */
        public static CSSStyleSheet addRuleProperty(InputStream inStream,String selectorText,String propertyName,String propertyValue,String priority){
            CSSStyleSheet sheet = null;
            try {
                InputSource source = new InputSource();
                source.setByteStream(inStream);
                source.setEncoding("UTF-8");
                final CSSOMParser parser = new CSSOMParser();
                sheet = parser.parseStyleSheet(source, null, null);
                CSSRuleList rules = sheet.getCssRules();
                if(rules.getLength() == 0 ){
                    return null;
                }
                for (int i = 0; i < rules.getLength(); i++) {
                    final CSSRule rule = rules.item(i);
                    //获取选择器名称
                    String selectorText_ = ((CSSStyleRule) rule).getSelectorText();
                    //获取样式内容
                    String cssText = ((CSSStyleRule)rule).getCssText();
                    
                    if(selectorText.equals(selectorText_)){
                        CSSStyleDeclaration cd =  ((CSSStyleRule)rule).getStyle();
                        cd.setProperty(propertyName, propertyValue, priority);
                    }
                }
            } catch (Exception e) {
                // TODO: handle exception
                e.printStackTrace();
                log.error("addRuleProperty***************************************"+e.getMessage());
                return null;
            }
            return sheet;
        }
        public static void main(String[] args) throws IOException {
    //        URL url = new URL("https://g.alicdn.com/tm/login/3.0.5/login_pc.css");
    //        HttpURLConnection connection = (HttpURLConnection)url.openConnection();
    //      InputStream inStream = connection.getInputStream();
            
            InputStream inStream = new FileInputStream(new File("D://test.css"));
    //        CSSStyleSheet sheet = addRuleProperty(inStream,".icon-cut","height","100%","important");
            
            
            CSSStyleSheet sheet = insertRule(inStream,".div{width:100px;height:200px;}");
            
    //        CSSStyleSheet sheet = updateRule(inStream,".div","height:100px;");
            
            String cssRule = sheet.getCssRules().toString();
            FileOutputStream out = new FileOutputStream("D://test.css");
            out.write(cssRule.getBytes());
            out.close();
            
    //        checkSelectorText(inStream,".table");
    //        checkCssProperty(inStream,".table","height");
              
            
        }
    }
    展开全文
  • javaCssParser 用于CSS文件解析的简单Java
  • CSS解析器实现为Java类的包,可输入级联样式表源文本并输出文档对象模型级别2样式树。 另外,应用程序可以使用SAC:CSS的简单API。 其目的是允许使用Java的开发人员主要与XML应用程序开发结合使用Cascading Style ...
  • Java CSS 2和CSS 3解析器和生成器。 此版本取代了phloc-css。 用于在构建时压缩CSS文件的Maven插件位于子项目ph-csscompress-maven-plugin中,并在下面进行了介绍。 ph-css没有将CSS应用于HTML元素的逻辑。 该页面...
  • JavaCSS 使用类 CSS 选择器的 Java 解析器和生成器
  • jspoon是一个Java库,它基于CSS选择器提供将Java解析为Java对象
  • jStyleParser是一个Java库,用于解析CSS样式表并根据CSS 3规范将样式分配给HTML或XML文档元素。 它允许解析单个CSS文件以及计算DOM元素的有效样式。 有关更多信息,请参见项目页面: : 安装 对于Maven,请使用...
  • 联合会 尝试创建基于JavaCSS解析
  • java+CSS说明

    2013-08-26 18:00:23
    java+CSS说明
  • JAVA通过epublib解析EPUB格式的电子书

    千次阅读 2020-03-08 16:20:52
    什么是 epub 格式 就像视频文件有 MP4,AVI,RMVB ...Java 解析 Epub 格式电子书 刚接到这个需求的时候,在网上找了很久,没找到很好的解析方法,最后找到了 epublib 这个解析库,但是下载对应的 jar 很麻烦,最终在 ...

    什么是 epub 格式

    就像视频文件有 MP4,AVI,RMVB 等等一样!电子书也有很多种格式:一文看懂mobi,azw3,epub格式电子书

    可以将 epub 格式的电子书更换后缀名,然后解压打开查看里面的文件信息。

    Java 解析 Epub 格式电子书

    刚接到这个需求的时候,在网上找了很久,没找到很好的解析方法,最后找到了 epublib 这个解析库,但是下载对应的 jar 很麻烦,最终在 maven 仓库搜索找到了。

    epublib 解析库

    epublib:a Java library for reading and writing epub files (一个用于读写 epub 文件的 Java 库)

    GitHub: https://github.com/psiegman/epublib

    官方网址:http://www.siegmann.nl/epublib

    API 地址:http://www.siegmann.nl/static/epublib/apidocs/(英文的)

    第一步:引入对应的 pom 文件

            <dependency>
                <groupId>com.positiondev.epublib</groupId>
                <artifactId>epublib-core</artifactId>
                <version>3.1</version>
            </dependency>
            <!--html解析 -->
            <dependency>
                <groupId>org.jsoup</groupId>
                <artifactId>jsoup</artifactId>
                <version>1.12.1</version>
            </dependency>
    

    第二步:常用关键类

    1.Book    		表示电子书。通过 book 对象可以获取 resource,Metadata 等具体内容
    2.Resource 		表示电子书内容资源, 一个 Resource 就是电子书的一部分内容,这资源信息可以是 html,css,js,图片等;
    3.Resources 	表示电子书全部的 Resource 对象。可以用过 id,herf,MediaType 来获取对应的 Resource 对象
    4.MetaData 		表示电子书的开篇信息。比如,作者,出版社,语言等;
    5.Spine 		电子书的 resource 顺序,有人说是目录信息,其实不是,是 resource 的阅读顺序,是线性结构的
    6.TableOfContent	电子书的目录信息,是树形结构的。可以获取到目录对应的resource。
    7.MediaType		Resource 的类型描述。用于说明此 Resource 是何种类型(CSS/JS/图片/HTML/ VEDIO 等)。
    

    第三步:解析一个epub文件

     public static void main(String[] args) {
    
            File file = new File("E:\\Download\\红楼梦.epub");
            InputStream in = null;
            try {
                //从输入流当中读取epub格式文件
                EpubReader reader = new EpubReader();
                in = new FileInputStream(file);
                Book book = reader.readEpub(in);
                //获取到书本的头部信息
                Metadata metadata = book.getMetadata();
                System.out.println("FirstTitle为:"+metadata.getFirstTitle());
                //获取到书本的全部资源
                Resources resources = book.getResources();
                System.out.println("所有资源数量为:"+resources.size());
                //获取所有的资源数据
                Collection<String> allHrefs = resources.getAllHrefs();
                for (String href : allHrefs) {
                    Resource resource = resources.getByHref(href);
                    //data就是资源的内容数据,可能是css,html,图片等等
                    byte[] data = resource.getData();
                    // 获取到内容的类型  css,html,还是图片
                    MediaType mediaType = resource.getMediaType();
                }
                //获取到书本的内容资源
                List<Resource> contents = book.getContents();
                System.out.println("内容资源数量为:"+contents.size());
                //获取到书本的spine资源 线性排序
                Spine spine = book.getSpine();
                System.out.println("spine资源数量为:"+spine.size());
                //通过spine获取所有的数据
                List<SpineReference> spineReferences = spine.getSpineReferences();
                for (SpineReference spineReference : spineReferences) {
                    Resource resource = spineReference.getResource();
                    //data就是资源的内容数据,可能是css,html,图片等等
                    byte[] data = resource.getData();
                    // 获取到内容的类型  css,html,还是图片
                    MediaType mediaType = resource.getMediaType();
                }
                //获取到书本的目录资源
                TableOfContents tableOfContents = book.getTableOfContents();
                System.out.println("目录资源数量为:"+tableOfContents.size());
                //获取到目录对应的资源数据
                List<TOCReference> tocReferences = tableOfContents.getTocReferences();
                for (TOCReference tocReference : tocReferences) {
                    Resource resource = tocReference.getResource();
                    //data就是资源的内容数据,可能是css,html,图片等等
                    byte[] data = resource.getData();
                    // 获取到内容的类型  css,html,还是图片
                    MediaType mediaType = resource.getMediaType();
                    if(tocReference.getChildren().size()>0){
                        //获取子目录的内容
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                //一定要关闭资源
                try {
                    if (in != null) {
                        in.close();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    

    注意事项

    1 解析后得到的data内容数据是html格式的富文本内容,如果需要纯文本,可以通过jsoup获取P标签的文本内容就可以了,但是获取后的纯文本排版就会乱。
    2 资源当中可能会存在图片和css等等,不在目录或者spine当中的内容,可以通过Resources.getByHref等方法获取。

    展开全文
  • 这允许您使用您喜欢的任何格式创建变量、混合和嵌套等常见功能。 事实上,大部分内置功能都使用插件。 很棒的捆绑插件 Omakase 捆绑了几个插件,最显着的是: (由 支持) 更好的错误信息 Omaka
  • jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。
  • 技术点:1、使用htmlparser解析html文件,得到html代码里的js、css、img链接 2、将相对路径的链接转变成绝对路径,并读取资源 3、将css和js合并到html 4、将图片转换成base64编码,写入标签的src
  • java中几种解析html的工具

    千次阅读 2021-02-12 09:37:14
    3.Apache tika tika是专为抽取而生的工具,还支持PDF、Zip甚至是Java Class。使用tika分析HTML,需要自己定义一个抽取内容的Handler并继承org.xml.sax.helpers.DefaultHandler,解析方式就是xml标准的方式。...

    Jsoup还支持白名单过滤机制,对于网站防止XSS攻击也是很好的。

    2.HtmlParser

    HtmlParser的功能比较完备,也挺灵活,但谈不上方便。这个项目很久没有维护了,最新版本是2.1。HtmlParser的核心元素是Node,对应一个HTML标签,支持getChildren()等树状遍历方式。HtmlParser另外一个核心元素是NodeFilter,通过实现NodeFilter接口,可以对页面元素进行筛选。这里有一篇HtmlParser的使用文章:使用 HttpClient 和 HtmlParser 实现简易爬虫。

    3.Apache tika

    tika是专为抽取而生的工具,还支持PDF、Zip甚至是Java Class。使用tika分析HTML,需要自己定义一个抽取内容的Handler并继承org.xml.sax.helpers.DefaultHandler,解析方式就是xml标准的方式。crawler4j中就使用了tika作为解析工具。SAX这种流式的解析方式对于分析大文件很有用,我个人倒是认为对于解析html意义不是很大。

    InputStream inputStream = null;

    HtmlParser htmlParser = new HtmlParser();

    htmlParser.parse(new ByteArrayInputStream(page.getContentData()),

    contentHandler, metadata, new ParseContext());

    4.HtmlCleaner与XPath

    HtmlCleaner最大的优点是:支持XPath的方式选取元素。XPath是一门在XML中查找信息的语言,也可以用于抽取HTML元素。XPath与CSS Selector大部分功能都是重合的,但是CSS Selector专门针对HTML,写法更简洁,而XPath则是通用的标准,可以精确到属性值。XPath有一定的学习成本,但是对经常需要编写爬虫的人来说,这点投入绝对是值得的。

    展开全文
  • 本文实例讲述了javascript判断移动端访问设备并解析对应CSS的方法。分享给大家供大家参考。具体分析如下: javascript判断不同web访问环境,主要针对移动设备,提供相对应的解析方案(判断设备代码直接copy腾讯网的...
  • 【JAVA】java解析HTML代码

    万次阅读 多人点赞 2017-07-12 13:53:31
    这里介绍采用java程序来读取HTML代码,由于java的通用性,可以很好的解析HTML中的数据,并存放到数据库中。读取网页中的HTML代码,见博客【JAVAJAVA程序根据url请求网站HTML页面 【开发环境】 1.Eclipse ,JDK...


    HTML在运用于web端,手机端越来越频繁。采用python等脚本语言,能够读取HTML代码。这里介绍采用java程序来读取HTML代码,由于java的通用性,可以很好的解析HTML中的数据,并存放到数据库中。读取网页中的HTML代码,见博客【JAVA】JAVA程序根据url请求网站HTML页面

    【开发环境】

    1.Eclipse ,JDK1.7,Windows。
    3.源代码HtmlParser.java。

    工程文件所在位置  git仓库

    【开发流程】

    1.通过Jsoup解析HTML的字符形式,生成Document类,该类具有一定的HTML文档格式;
    2.Document通过select(String)方法或者getElementsByXxx(String)方法获取HTML标签,类型为Elements;
    3..其中select方法中的String
    如:<table id = "table1"></table> ,采用select(“#table1”)
    <table class = "table2"></table>,采用select(".table2")
    <table ></table>,采用select("table")。
    其中getElementsById(“table1”)
    getElementsByClass("table2")
    getElementsByTag("table"),与上面一一对应。
    4.Elements元素为多个Element,Element也可以采用select(String )和getElementsByXxx()方法获取子层的Element。
    5.Element可以采用getText()方法获取标签之间的文本,采用getAttr(String)方法获取标签内的属性值。
    如:<a id="link" href="www.kaifa.com">开发</a>,doc.select("#link").getText()得到字符串  "开发",
    doc.select("#link").getAttr("href")得到字符串“www.kaifa.com”。

    【源代码】

    //HtmlParser.java
    package HtmlBody;
    
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.LinkedList;
    import java.util.List;
    
    import org.jsoup.Jsoup;
    import org.jsoup.nodes.Document;
    import org.jsoup.nodes.Element;
    import org.jsoup.select.Elements;
    
    /**
     * Jsoup解析html标签时类似于JQuery的一些符号
     * 
     * @author chixh
     *
     */
    public class HtmlParser {
    	protected List<List<String>> data = new LinkedList<List<String>>();
    
    	/**
    	 * 获取value值
    	 * 
    	 * @param e
    	 * @return
    	 */
    	public static String getValue(Element e) {
    		return e.attr("value");
    	}
    
    	/**
    	 * 获取
    	 * <tr>
    	 * 和
    	 * </tr>
    	 * 之间的文本
    	 * 
    	 * @param e
    	 * @return
    	 */
    	public static String getText(Element e) {
    		return e.text();
    	}
    
    	/**
    	 * 识别属性id的标签,一般一个html页面id唯一
    	 * 
    	 * @param body
    	 * @param id
    	 * @return
    	 */
    	public static Element getID(String body, String id) {
    		Document doc = Jsoup.parse(body);
    		// 所有#id的标签
    		Elements elements = doc.select("#" + id);
    		// 返回第一个
    		return elements.first();
    	}
    
    	/**
    	 * 识别属性class的标签
    	 * 
    	 * @param body
    	 * @param class
    	 * @return
    	 */
    	public static Elements getClassTag(String body, String classTag) {
    		Document doc = Jsoup.parse(body);
    		// 所有#id的标签
    		return doc.select("." + classTag);
    	}
    
    	/**
    	 * 获取tr标签元素组
    	 * 
    	 * @param e
    	 * @return
    	 */
    	public static Elements getTR(Element e) {
    		return e.getElementsByTag("tr");
    	}
    
    	/**
    	 * 获取td标签元素组
    	 * 
    	 * @param e
    	 * @return
    	 */
    	public static Elements getTD(Element e) {
    		return e.getElementsByTag("td");
    	}
    	/**
    	 * 获取表元组
    	 * @param table
    	 * @return
    	 */
    	public static List<List<String>> getTables(Element table){
    		List<List<String>> data = new ArrayList<>();
    		
    		for (Element etr : table.select("tr")) {
    			List<String> list = new ArrayList<>();
    			for (Element etd : etr.select("td")) {
    				String temp = etd.text();
    				//增加一行中的一列
    				list.add(temp);
    			}
    			//增加一行
    			data.add(list);
    		}
    		return data;
    	}
    	/**
    	 * 读html文件
    	 * @param fileName
    	 * @return
    	 */
    	public static String readHtml(String fileName){
    		FileInputStream fis = null;
    		StringBuffer sb = new StringBuffer();
    		try {
    			fis = new FileInputStream(fileName);
    			byte[] bytes = new byte[1024];
    			while (-1 != fis.read(bytes)) {
    				sb.append(new String(bytes));
    			}
    		} catch (FileNotFoundException e) {
    			e.printStackTrace();
    		} catch (IOException e) {
    			e.printStackTrace();
    		} finally {
    			try {
    				fis.close();
    			} catch (IOException e1) {
    				e1.printStackTrace();
    			}
    		}
    		return sb.toString();
    	}
    	public static void main(String[] args) {
    		// String url = "http://www.baidu.com";
    		// String body = HtmlBody.getBody(url);
    		// System.out.println(body);
    
    		Document doc = Jsoup.parse(readHtml("./index.html"));
    		// 获取html的标题
    		String title = doc.select("title").text();
    		System.out.println(title);
    		// 获取按钮的文本
    		String btnText = doc.select("div div div div div form").select("#su").attr("value");
    		System.out.println(btnText);
    		// 获取导航栏文本
    		Elements elements = doc.select(".head_wrapper").select("#u1").select("a");
    		for (Element e : elements) {
    			System.out.println(e.text());
    		}
    		Document doc2 = Jsoup.parse(readHtml("./table.html"));
    		Element table = doc2.select("table").first();
    		List<List<String>> list = getTables(table);
    		for (List<String> list2 : list) {
    			for (String string : list2) {
    				System.out.print(string+",");
    			}
    			System.out.println();
    		}
    	}
    
    }
    

    【解析的HTML页面文件】

    //index.html

    <!DOCTYPE html>
    <!--STATUS OK-->
    <html>
    <head>
    <meta http-equiv=content-type content=text/html;charset=utf-8>
    <meta http-equiv=X-UA-Compatible content=IE=Edge>
    <meta content=always name=referrer>
    <link rel=stylesheet type=text/css href=http://s1.bdstatic.com/r/www/cache/bdorz/baidu.min.css>
    <title>百度一下,你就知道</title>
    </head>
    <body link=#0000cc>
    	<div id=wrapper>
    		<div id=head>
    			<div class=head_wrapper>
    				<div class=s_form>
    					<div class=s_form_wrapper>
    						<div id=lg>
    							<img hidefocus=true src=//www.baidu.com/img/bd_logo1.png width=270 height=129>
    						</div>
    						<form id=form name=f action=//www.baidu.com/s class=fm>
    							<input type=hidden name=bdorz_come value=1>
    							<input type=hidden name=ie value=utf-8>
    							<input type=hidden name=f value=8>
    							<input type=hidden name=rsv_bp value=1>
    							<input type=hidden name=rsv_idx value=1>
    							<input type=hidden name=tn value=baidu>
    							<span class="bg s_ipt_wr">
    								<input id=kw name=wd class=s_ipt value maxlength=255 autocomplete=off autofocus>
    							</span>
    							<span class="bg s_btn_wr">
    								<input type=submit id=su value=百度一下 class="bg s_btn">
    							</span>
    						</form>
    					</div>
    				</div>
    				<div id=u1>
    					<a href=http://news.baidu.com name=tj_trnews class=mnav>新闻</a>
    					<a href=http://www.hao123.com name=tj_trhao123 class=mnav>hao123</a>
    					<a href=http://map.baidu.com name=tj_trmap class=mnav>地图</a>
    					<a href=http://v.baidu.com name=tj_trvideo class=mnav>视频</a>
    					<a href=http://tieba.baidu.com name=tj_trtieba class=mnav>贴吧</a>
    					<noscript>
    						<a href=http://www.baidu.com/bdorz/login.gif?login&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2f%3fbdorz_come%3d1 name=tj_login class=lb>登录</a>
    					</noscript>
    					<script>document.write('<a href="http://www.baidu.com/bdorz/login.gif?login&tpl=mn&u='+ encodeURIComponent(window.location.href+ (window.location.search === "" ? "?" : "&")+ "bdorz_come=1")+ '" name="tj_login" class="lb">登录</a>');</script>
    					<a href=//www.baidu.com/more / name=tj_briicon class=bri style="display: block;">更多产品</a>
    				</div>
    			</div>
    		</div>
    		<div id=ftCon>
    			<div id=ftConw>
    				<p id=lh>
    					<a href=http://home.baidu.com>关于百度</a>
    					<a href=http://ir.baidu.com>About Baidu</a>
    				</p>
    				<p id=cp>
    					&copy;2017 Baidu 
    					<a href=http://www.baidu.com/duty />
    					使用百度前必读
    					</a>
    					 
    					<a href=http://jianyi.baidu.com / class=cp-feedback>意见反馈</a>
    					 京ICP证030173号  <img src=//www.baidu.com/img/gs.gif>
    				</p>
    			</div>
    		</div>
    	</div>
    </body>
    </html>
    

    //table.html

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>table</title>
    </head>
    <body>
    	<table border="0" width="750" bgcolor="#000000" cellspacing="1" cellpadding="2">
    
    		<tr bgcolor="#efefef">
    			<td width="80">基金代码</td>
    			<td width="100">基金名称</td>
    			<td>单位基金净值(元)</td>
    			<td>单位累计净值(元)</td>
    			<td>年中年末份额净值(元)</td>
    			<td>年中年末累计净值(元)</td>
    			<td>基金资产净值(元)</td>
    			<td></td>
    			<td></td>
    		</tr>
    		<tr bgcolor="#FFFFFF" height="30">
    			<td>010101</td>
    			<td>天弘股票基金</td>
    			<td style="color: blue">2.100</td>
    			<td style="color: blue">4.001</td>
    			<td style="color: blue"></td>
    			<td style="color: blue"></td>
    			<td style="color: blue"></td>
    			<td style="color: blue"></td>
    			<td style="color: blue"></td>
    		</tr>
    	</table>
    </body>
    </html>

    【程序结果】

    HTML解析结果


    展开全文
  • JAVA爬虫使用Css选择器

    2019-06-10 15:42:16
    jsoup是一款Java的HTML解析器,主要用来对HTML解析。官网 中文文档 在爬虫的时候,当我们用HttpClient之类的框架,获取到网页源码之后,需要从网页源码中取出我们想要的内容, 就可以使用jsoup这类HTML解析器了。...
  • Java web前端——CSS使用基础

    千次阅读 多人点赞 2018-09-02 18:03:27
    CSS简介 1.1 CSS概念 ...CSS不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式化。 多个样式可以层层覆盖叠加,如果不同的css样式对同一html标签进行修饰,样式有冲突的,...
  • java解析html文件

    千次阅读 2018-08-04 17:11:27
    +"<DIV class=css_doc_content_doctitle>注射用甲硫氨酸维B<SUB>1说明书</DIV><A name=content_item_2></A>" +"<DIV class=css_doc_content_title>【说明书修订日期】</DIV>" +"<DIV class=css_doc_content_text>...
  • 乔德·拉加托(Jodd Lagarto) :glowing_star: Java HTML解析器套件。 :house_with_garden: 网站: :red_heart_selector: 对于开发人员,由开发人员执行。... CSSelly最后,是CSS3选择器的解析器。
  • jsoup:Java HTML解析器 jsoup是一个用于处理实际HTML的Java库。 它使用HTML5最佳DOM方法和CSS选择器,为获取URL以及提取和处理数据提供了非常方便的API。 jsoup实现规范,并将HTML解析为与现代浏览器相同的DOM。 ...
  • java的jsoup介绍--java爬虫与java解析html

    千次阅读 2017-04-28 14:07:49
    jsoup是java的文档解析工具,很方便,很强大。它可以将html文件、字符串或URL转化为Document对象,然后可以通过DOM、CSS和类似jQuery的操作方式,取出或设置属性和内容。它还可以清理不受信任的html,以防止XSS攻击...
  • jsoup 是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址、HTML 文本内容。它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 jQuery 的操作方法来取出和操作数据。 jsoup 可以从包括字符串、URL 地址...
  • jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,  可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。 2.主要功能 1.从一个URL,文件或字符串中...
  • 关于Java后台 HTML+CSS3 转换生成PDF文件问题求助! 公司需求:HTML+CSS3(CSS样式是直接写在HTML文件当中)转换为PDF文件,并上传阿里云OSS供用户下载 。 本身这个需求并不难,功能做完后不管是PDF质量...
  • sql解析json格式字段

    千次阅读 2021-05-05 01:03:56
    java将json数据解析为sql语句?图片中是json数据,每个数据的开头都有表名称,操作类型,后面是数据,import java.util.Iterator;import java.util.Set;import java.util.Map.Entry;import ...
  • 这段时间我们在做一个英语翻译软件的小小小APP,涉及到了对Json数据的解析,所以特地来总结一下!假设我们要对如下数据进行解析,其实在平时,返回的Json数据是很乱的,很难分清数据的关系,这是经过相关工具美化后...
  • Java 代码实例 7】jsoup解析html

    千次阅读 热门讨论 2021-03-12 23:57:08
    Jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。 二、Jsoup的主要功能 1、从一个URL,文件或字符...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 89,496
精华内容 35,798
关键字:

java解析css格式

java 订阅