jsoup

文章参考学习后总结
参考文章

https://www.yiibai.com/jsoup/jsoup-quick-start.html#article-start
https://blog.csdn.net/u010814849/article/details/52526582

获取对象方式:

方法 描述 case
static Connection connect(String url) 创建并返回URL的连接 case1
static Document parse(File in, String charsetName) 将指定的字符集文件解析成文档。 case2
static Document parse(String html) 将给定的html代码解析成文档。 case3
static String clean(String bodyHtml, Whitelist whitelist) 从输入HTML返回安全的HTML,通过解析输入HTML并通过允许的标签和属性的白名单进行过滤 case4

对应case1、case2、case3、case4:

    public static void main(String[] args) throws Exception {
        //case1:Jsoup.connect从网页获取title
        Document case1 = Jsoup.connect("http://www.baidu.com").get();
        System.out.println(case1.title());
        //打印内容“百度一下,你就知道”

        //case2:Jsoup.parse从文档获取title
        Document case2 = Jsoup.parse( new File( "D:/temp/index.html" ) , "utf-8" );
        System.out.println(case2.title());
        //打印内容“百度一下,你就知道”

        //case3:Jsoup.parse从网页获取title
        String html = "<html><head><title>百度一下,你就知道</title></head>"
                + "<body><p>Parsed HTML into a doc.</p></body></html>";
        Document case3 = Jsoup.parse(html);
        System.out.println(case3.title());
        //打印内容“百度一下,你就知道”


        //case4: Jsoup.clean
        String dirtyHTML = "<p><a href='http://www.yiibai.com/' onclick='sendCookiesToMe()'>Link</a></p>";
        String cleanHTML = Jsoup.clean(dirtyHTML, Whitelist.basic());
        System.out.println(cleanHTML);
        //  执行后输出结果如下<p><a href="http://www.yiibai.com/" rel="nofollow">Link</a></p>

        }

方法总结

(Document Elements  Element) 公用方法:
 Document document = Jsoup.connect("https://www.yiibai.com/").get();
        //getElementById(String idName)  根据id获取Element
        Element formElement = document.getElementById("footer-copyright");

        //document.text() 打印所有内容
        System.out.println(document.text());

        //getElementsByTag  根据标签属性获取(例如,input,Strong)
        Element formElement1=formElement.getElementsByTag("strong").first();
        System.out.println(formElement1.text());

//        根绝class获取Elements
        Element formElement = doc.getElementsByClass("fixed-btn").first();
        System.out.println(formElement);
        //<div class="fixed-btn"> </div>


        //attr(String name,String values)在获取标签后增加属性
        formElement1.attr("hi","我要替换");
        //替换后为 
        System.out.println(formElement1);
        //打印信息: <strong hi="我要替换"><a href="https://www.yiibai.com/" target="_blank">易百教程</a></strong>

        //Jsoup.clean
        String dirtyHTML = "<p><a href='http://www.yiibai.com/' onclick='sendCookiesToMe()'>Link</a></p>";
        String cleanHTML = Jsoup.clean(dirtyHTML, Whitelist.basic());
        System.out.println(cleanHTML);
        //  执行后输出结果如下<p><a href="http://www.yiibai.com/" rel="nofollow">Link</a></p>

        //根据标签里面的熟悉values获取 Element
        // Elementz 值为<meta name="keywords" content="VBScript, MATLAB, EJB, IPv6, IPv4, 电子商务, PostgreSQL, SQLite, SDLC, Assembly, 操作系统">
        String keywords = doc.select("meta[name=keywords]").first().attr("content");
        String keywords1 = doc.select("meta[name=keywords]").attr("content");
        System.out.println("Meta keyword : " + keywords);
        //打印内容为       Meta keyword : VBScript, MATLAB, EJB, IPv6, IPv4, 电子商务, PostgreSQL, SQLite, SDLC, Assembly, 操作系统, 

        //获取图片Element 并打印相关信息
        Elements images = doc.select("img[src~=(?i)\\.(png|jpe?g|gif)]");
        for (Element image : images) {
            System.out.println("src : " + image.attr("src"));
            System.out.println("height : " + image.attr("height")+"width : " + image.attr("width")+"alt : " + image.attr("alt"));
        }

        //获取input并打印key和values
        Elements inputElements = doc.getElementsByTag("input");
        for (Element inputElement : inputElements) {
            String key = inputElement.attr("name");
            String value = inputElement.attr("value");
            System.out.println("Param name: "+key+" \nParam value: "+value);
        }

        //获取网页title
        String title = doc.title();
        System.out.println("title is: " + title);
        //打印内容“title is: 易百教程™ - 专注于IT教程和实例”


       //要获取网页中的所有链接,请使用以下代码。
       Document document = Jsoup.connect("https://www.baidu.com/").get();
       Elements links = document.select("a[href]");
       //获取其中一个Element为:<a href="http://news.baidu.com" target="_blank" class="mnav">新闻</a>
            for (Element link : links)
            {
                //获取Element里面的 hrep和text
                System.out.println("link : " + link.attr("href"));
                //使用 abs:获得决定路径
                //String absHref = link.attr("abs:href"); 
                System.out.println("text : " + link.text());
            }

        Elements links = doc.select("a[href]"); //带有href属性的a元素
        Elements pngs = doc.select("img[src$=.png]"); //扩展名为.png的图片
        Element masthead = doc.select("div.fixed-btn").first();//class等于fixed-btn的div标签
       Element masthead = doc.select("div#footer-copyright").first();//id等于footer-copyright的div标签
      //参考Selector选择器 基本用法  组合器
        Elements resultLinks = doc.select("h3.r > a"); //在h3元素之后的a元素

        System.out.println(masthead);

      文本修改:
        Element  doch =Jsoup.parse("<div></div>").select("div").first();
        System.out.println(doch);
        //打印=<div></div>
        //增加text
        doch.text("TEST");
        System.out.println(doch);
        //打印<div>TEST</div>
        //text前面增加
        doch.prepend("前面添加");
        System.out.println(doch);
        //打印<div>    前面添加TEST    </div>
        //text后面增加
        doch.append("后面添加");
        //打印<div>     前面添加TEST后面添加    </div>
        System.out.println(doch);
//根据html  获取所有表单中的form的action  和input的name
 public static  Map getJdPayH5(String  respone){
     Map reqMap2 = new HashMap();
     Document doc = Jsoup.parse(respone);
    System.out.println(doc);
     reqMap2.put("requestUrl",doc.getElementsByTag("form").attr("action").toString());
     Elements times_links = doc.getElementsByTag("input");
     for(Element a :times_links){
           reqMap2.put(a.attr("name"),a.attr("value"));
        }
     return   reqMap2;
    }

Connection

Document doc = Jsoup.connect("http://example.com")
                   .data("query", "Java")
                   .userAgent("Mozilla")
                   .cookie("auth", "token")
                   .timeout(3000)
                   .post();

查找元素:

getElementById(String id) id
getElementsByTag(String tag) 标签名
getElementsByClass(String className) class名
getElementsByAttribute(String key) 属性
siblingElements() 所有的兄弟元素
firstElementSibling() 第一个兄弟元素
lastElementSibling() 最后一个兄弟元素
nextElementSibling() 下一个兄弟元素
previousElementSibling() 上一个兄弟元素
parent() 获取该元素父节点
children() 获取该元素的子元素
child(int index) 获取该元素的第几个子元素(下标从0开始)

元素数据

attr(String key) 获取属性
attr(String key, String value) 设置属性
attributes() 获取所有属性
id() 获取该元素id
className() 获取该元素class,多个class之间空格隔开
classNames() 获取所有元素的class
text() 获取文本内容
text(String value) 设置文本内容
html() 获取元素内HTML
html(String value) 设置元素内的HTML内容
outerHtml() 获取元素外HTML内容
data() 获取数据内容(例如:script和style标签)
tag()
tagName() 获取元素标签名

操作HTML和文本

append(String html) 添加给定的html到元素末尾
prepend(String html) 添加给定html到元素前面
appendText(String text) 创建并添加文本
prependText(String text) 创建并添加文本
appendElement(String tagName) 添加到元素末尾
prependElement(String tagName) 添加到元素前
html(String value) 设置元素值

Selector选择器 基本用法

tagname 使用标签名来定位,例如 a
ns|tag 使用命名空间的标签定位,例如 fb:name 来查找 <fb:name> 元素
#id 使用元素 id 定位,例如 #logo
.class 使用元素的 class 属性定位,例如 .head
[attribute] 使用元素的属性进行定位,例如 [href] 表示检索具有 href 属性的所有元素
[^attr] 使用元素的属性名前缀进行定位,例如 [^data-] 用来查找 HTML5 的 dataset 属性
[attr=value] 使用属性值进行定位,例如 [width=500] 定位所有 width 属性值为 500 的元素
[attr^=value], [attr$=value], [attr*=value] 利用匹配属性值开头、结尾或包含属性值来查找元素,比如:[href*=/path/]
[attr~=regex] 利用属性值匹配正则表达式来查找元素,例如img[src~=(?i).(png |jpe?g)]
* 定位所有元素

Selector选择器 组合使用

el#id 定位 id 值某个元素,例如 a#logo -> <a id=logo href= … >
el.class 定位 class 为指定值的元素,例如 div.head -> <div class=head>xxxx</div>
el[attr] 定位所有定义了某属性的元素,例如 a[href]
以上三个任意组合 例如 a[href]#logo 、a[name].outerlink
ancestor child 查找某个元素下子元素,比如:可以用.body p 查找在"body"元素下的所有 p元素
parent > child 查找某个父元素下的直接子元素,比如:可以用div.content > p 查找 p 元素,也可以用body > * 查找body标签下所有直接子元素
siblingA + siblingB 查找在A元素之前第一个同级元素B,比如:div.head + div
siblingA ~ siblingX 查找A元素之前的同级X元素,比如:h1 ~ p
el, el, el 多个选择器组合,查找匹配任一选择器的唯一元素,例如:div.masthead, div.logo

伪选择器selectors (表达式):

:lt(n) 查找哪些元素的同级索引值(它的位置在DOM树中是相对于它的父节点)小于n,比如:td:lt(3) 表示小于三列的元素
:gt(n) 查找哪些元素的同级索引值大于n``,比如: div p:gt(2)表示哪些div中有包含2个以上的p元素
:eq(n) 查找哪些元素的同级索引值与n相等,比如:form input:eq(1)表示包含一个input标签的Form元素
:has(seletor) 查找匹配选择器包含元素的元素,比如:div:has(p)表示哪些div包含了p元素
:not(selector) 查找与选择器不匹配的元素,比如: div:not(.logo) 表示不包含 class=logo 元素的所有 div 列表
:contains(text) 查找包含给定文本的元素,不区分大不写,比如: p:contains(jsoup)
:containsOwn(text) 查找文本信息完全等于指定条件的元素
:matches(regex) 使用正则表达式进行文本过滤:div:matches((?i)login)
:matchesOwn(regex) 使用正则表达式找到自身的文本
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,602评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,442评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,878评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,306评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,330评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,071评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,382评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,006评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,512评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,965评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,094评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,732评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,283评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,286评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,512评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,536评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,828评论 2 345

推荐阅读更多精彩内容