请选择 进入手机版 | 继续访问电脑版
搜索
房产
装修
汽车
婚嫁
健康
理财
旅游
美食
跳蚤
二手房
租房
招聘
二手车
教育
茶座
我要买房
买东西
装修家居
交友
职场
生活
网购
亲子
情感
龙城车友
找美食
谈婚论嫁
美女
兴趣
八卦
宠物
手机

网络爬虫(二)

[复制链接]
查看: 67|回复: 0

3万

主题

3万

帖子

9万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
91650
发表于 2020-2-15 03:24 | 显示全部楼层 |阅读模式
在我们抓取到页面以后,还需要对页面举行分解。全部页面都是字符串的形式,可以利用字符串处置惩罚工具来分解页面,也可以利用正则表达式,但这些方式城市带来很大的斥地本钱。所以我们需要一款准们分解 html 页面的工具。
Jsoup

    jsoup是一款 java 的 HTML 分解器,可间接分解某个URL地点、HTML文本内容。它供给了一套很是省力的API,可经过DOM,CSS以及类似于jQuery的利用方式来取出和利用数据。
    重要功用:
        1. 从URL,文件或字符串平分解HTML;
        2. 利用DOM 或 CSS挑选器来查找、取出数据;
        3. 可利用 HTML元素、属性、文本(底子不利用)
利用:

    1. 导入依靠坐标(jsoup、commons-io、commons-lang3)

    2.1. 测试代码,分解URL
  1.         @Test        public void urlFun() throws Exception {        // 分解URL地点,参数:拜候的url,拜候时的超不时候        Document doc = Jsoup.parse(new URL("http://112.124.1.187/"),10000);            // 利用标签挑选器        String title = doc.getElementsByTag("title").first().text();            System.out.println(title);    }
复制代码

    ps: 这里我们可以得出,Jsoup 可以取代 HttpClient 间接倡议请求数据。可是我们凡是不会这么做,由于现实斥地中,需要利用到多线程、毗连池、代理等等,而 Jsoup 对这些的支持并不是很好,所以我们一样平常把 Jsoup 仅仅作为 html 分解工具利用。
     2.2. 测试代码,分解字符串
  1.     @Test    public void strFun() throws Exception {        // 从文件获得字符串        String content = FileUtils.readFileToString(new File("C:\\Users\\24360\\Desktop\\a.html"),"utf-8");            // 分解字符串        Document doc = Jsoup.parse(content);            // 利用标签挑选器        String title = doc.getElementsByTag("title").first().text();            System.out.println(title);    }
复制代码

     2.3. 测试代码,分解文件
  1.     @Test    public void strFun() throws Exception {            // 分解文件        Document doc = Jsoup.parse(new File("C:\\Users\\24360\\Desktop\\a.html"),"gbk");            // 利用标签挑选器        String title = doc.getElementsByTag("title").first().text();            System.out.println(title);    }
复制代码
     3. 利用dom分解
  1.     @Test    public void domTest() throws IOException {        // 分解文件,获得Document工具        Document doc = Jsoup.parse(new File("C:\\Users\\24360\\Desktop\\a.html"),"gbk");        // 1.按照id获得元素: getElementById        Element element1 = doc.getElementById("header");//        System.out.println(element1.text());        // 2.按照标签获得元素: getElementsByTag        Element element2 = doc.getElementsByTag("span").get(2);        System.out.println(element2.text());        // 3.按照class获得元素: getElementsByClass        Element element3 = doc.getElementsByTag("class_a").get(0);        System.out.println(element3.text());        // 4.按照属性获得元素: getElementsByAttribute        Element element4 = doc.getElementsByTag("href").get(0);        System.out.println(element4.text());        // 4.2 倘使有多个属性名类似的情况,也可以按照属性-值 来获得        Element element5 = doc.getElementsByAttributeValue("href","http://www.baidu.com").get(0);        System.out.println(element5.text());    }
复制代码
     4. 从元素中获得数据

    如:百度
  1.     @Test    public void attrTest() throws IOException {        // 分解文件,获得Document工具        Document doc = Jsoup.parse(new File("C:\\Users\\24360\\Desktop\\a.html"),"gbk");        // 1.按照id获得元素: getElementById        Element ele = doc.getElementById("baidu");            // 元素中获得数据        // 1.元素中获得id        String strId = ele.id();        System.out.println(strId);  // baidu            // 2.元素中获得类名        String className = ele.className();        System.out.println("全数类名:" + className);    // 全数类名:class_a class_b        Set classSet = ele.classNames();        for(String s : classSet){            // class_a class_b            System.out.println(s);         }        // 3.元素中获得对应属性的值        String attr = ele.attr("href"); //http://www.baidu.com        System.out.println(attr);            // 4 获得全数下性        Attributes attrs = ele.attributes();        System.out.println(attrs.toString());   // id="baidu"  href="http://www.baidu.com"    }
复制代码

    5.1 利用 Selector 挑选器

tagname:经过标签查找元素,例:span
        #id:经过id查找元素,例:#group
        .class:经过类名查找元素,例:.class_a
  [attribute]:经过属性查找元素,例:[abc]
        [attr=value]:经过属性值查找元素,例:[class=sn]
    如:
        百度
        属性值
  1.     @Test        public void selectorTest() throws IOException {        // 分解文件,获得Document工具        Document doc = Jsoup.parse(new File("C:\\Users\\24360\\Desktop\\a.html"),"gbk");            //  tagname:经过标签查找元素,例:span        Element e1 = doc.select("a").get(0);        System.out.println(e1.text());              // 百度        //  #id:经过id查找元素,例:#baidu        Element e2 = doc.select("#baidu").get(0);        System.out.println(e2.text());              // 百度        //  .class:经过类名查找元素,例:.class_a        Element e3 = doc.select(".class_a").get(0);        System.out.println(e3.text());              // 百度        //  [attribute]:经过属性查找元素,例:[abc]        Element e4 = doc.select("[abc]").get(0);        System.out.println(e4.text());              // 属性值        //   [attr=value]:经过属性值查找元素,例:[abc=123]        Element e5 = doc.select("[abc=123]").get(0);        System.out.println(e5.text());              // 属性值    }
复制代码

    5.2 Selector 挑选器组合利用
        el#id:元素+ID,例:h3#group
        el.class:元素+类名,例:h3.class_a
        el[attr]:元素+属性名,例:span[abc]
        尽情组合:例:span[abc].class_a
        ancestor child:查找某个元素下子元素,例:.class_a li,查找“.class_a”下的全数li
        parent > child:查找某个父元素下的间接子元素(第一级)
        parent > *:查找某个父元素下的全数间接子元素

免责声明:假如加害了您的权益,请联系站长,我们会实时删除侵权内容,感谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright © 2006-2014 WAYSFOCUS 影像 你 我 他,中国商业影视一站式解决平台 版权所有 法律顾问:高律师 客服电话:0791-88289918
技术支持:迪恩网络科技公司  Powered by Discuz! X3.2
快速回复 返回顶部 返回列表