java爬虫之Jsoup入门

  1. 网络爬虫
    1. 网络爬虫概念

网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。

    1. 网络爬虫用途
  • 搜索引擎,常见的搜索引擎背后都是一个庞大无比的爬虫网络,用于随时随地从互联网上抓取信息,例如百度,谷歌,搜狗,bing等.
  • 数据分析,获取各种行业数据,通过数据整合和数据清洗来得到需要的数据,例如天眼查,比价网等;
  • 舆情监测, 整合互联网信息采集技术及信息智能处理技术通过对互联网海量信息自动抓取、自动分类聚类、主题检测、专题聚焦,实现用户的网络舆情监测和新闻专题追踪等信息需求,形成简报、报告、图表等分析结果,为客户全面掌握群众思想动态,做出正确舆论引导,提供分析依据。
  • 基础信息服务,比如游戏中需要获取各种行业信息,球员资料等,例如NBA2K,FIFA 14,实况足球等;
    1. 网络爬虫的原理流程
  • 模拟浏览器请求互联网资源,URL,HttpClient,Jsoup,restTemplate等
  • 解析得到的资源获取所需数据,String,HtmlParser,Jsoup
  • 存储数据:数据库,Excel,TXT
  1. Jsoup介绍
    1. 概述

jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。官网是: https://jsoup.org/

    1. 功能
  • 从一个URL,文件或字符串中解析HTML
  • 使用DOM或CSS选择器来查找、取出数据
  • 可操作HTML元素、属性、文本
    1. Api
    2. 常用类
  • org.jsoup.Jsoup

提供了连接,清理和解析HTML文档的方法

  • org.jsoup.nodes.Document

   表示一个解析后的html文档对象,可以从该对象内获取指定元素

  • org.jsoup.nodes.Element

    表示一个html元素,比如div,span,ul等,可以从该对象内获取指定属性

  • org.jsoup.select.Elements

一个Element对象的有序集合,用法与ArrayList相同

      1. 常用方法
  • Jsoup.connect(url).get(),返回值 Document

根据url获取指定的html文档对象

  • Document或Element.getElementById("id"),返回值 Element

根据指定id获取html元素对象

  • Document或Element. getElementsByTag ("tag"),返回值 Elements

根据指定标签名获取所有的html元素对象的集合

  • Document或Element. getElementsByClass ("class"),返回值 Elements

根据指定class名获取所有的html元素对象的集合

  • Document或Element. text(),返回值 String

获取该元素的文本对象,不包含html标签元素

  • Document或Element. html(),返回值 String

获取该元素的文本对象,包含html标签元素

  • Element.attr("attr"),返回值 String

获取该元素的指定属性

  1. 爬虫入门-下载小说
    1. 网站说明:

为避免版权等问题,本次示例使用了一个小说的小站: https://www.xs222.tw/

    1. 爬取流程分析:
  • 解析小说首页,获取所有小说章节链接
  • 解析具体章节链接,获取章节对象
  • 把章节对象存入小说文档
    1. 代码实现
      1. 解析小说首页
      2. /**
         * 根据小说网址获取所有小说章节信息
         * @param url
         * @return
         * @throws IOException
         */
        private static List<String> getAllLinks(String url) throws IOException {
            Document document = Jsoup.connect(url).get();
            Elements elements = document.getElementById("list").getElementsByTag("a");
            List<String> links = new ArrayList<String>();
            for(Element el : elements){
                String link = el.getElementsByTag("a").attr("abs:href");
                links.add(link);
            }
            return links;
        }

3.3.2解析章节

/**
 * 根据小说章节链接获取小说章节内容
 * @param url
 * @return
 * @throws IOException
 */
private static Charpter getCharpter(String url) throws IOException {
    Document document = Jsoup.connect(url).get();
    String name = document.getElementsByTag("h1").text();
    String content = document.getElementById("content").html()
            .replace("<br>","\r\n").replace("&nbsp;"," ");
    Charpter charpter = new Charpter(name,content);
    return charpter;
}

 ​​​​​​​3.3.3写入文件

public static void main(String[] args) throws IOException {
    // 获取所有章节链接
    List<String> links = getAllLinks("https://www.xs222.tw/html/15/15374/");
    // 创建文件输出流对象
    FileWriter fw = new FileWriter("剑来.txt");
    BufferedWriter bw = new BufferedWriter(fw);
    // 遍历章节链接集合 获取每个章节的内容
    for(String link : links){
        // 获取章节对象
        Chapter chapter = getChapter(link);
        // 写入章节标题
        bw.write(chapter.getName());
 // 换行
        bw.newLine();
        // 写入章节内容
        bw.write(chapter.getContent());
        bw.newLine();
        System.out.println("章节:"+chapter.getName()+" 已经下载完毕!!!");
    }
    bw.close();
    fw.close();
}

更多学习链接:

 java基础教程:https://ke.qq.com/course/149432?tuin=57912c43

大型ERP实战项目:https://ke.qq.com/course/396326?tuin=57912c43

加老师微信17390945027领取相关视频学习资料

猜你喜欢

转载自blog.csdn.net/renlianggee/article/details/90022027
今日推荐