zoukankan      html  css  js  c++  java
  • Java爬虫框架Jsoup学习记录

    Jsoup的作用

    当你想获得某网页的内容,可以使用此框架做个爬虫程序,爬某图片网站的图片(先获得图片地址,之后再借助其他工具下载图片)或者是小说网站的小说内容

    我使用Jsoup写出的一款小说下载器,小说下载器

    Jsoup导入

    Jsoup官网

    1. 使用gradle导入

    compile 'org.jsoup:jsoup:1.11.1'
    

    2. 第三方包导入

    Jsoup使用

    Jsoup中文文档

    1. 获得Document

    • 本地html文件或者使用javaIO流,则使用静态方法parse方法

       Document document = Jsoup.parse("D:\test.html");
      
    • 网址的话使用静态方法connect().get()

       Document document = Jsoup.connect("https://www.baidu.com").get();
      

    2. 根据id找到某标签 document.getElementById

    因为id是唯一的,所以找到唯一的一个Element

    	Element element = document.getElementById("id名");
    

    3. 根据class找到某标签 document.getElementsByClass

    class可能不止一个,所以这里返回的是一个Elemnts数组

    Elements elements = document.getElementsByClass("d_title").select("h1");
    

    4. 获得标签的内容 element.text()

    例如html文件中有段代码为

    <a id="title">hello world</a>
    

    获得a标签的内容的代码为

    Element element = document.getElementById("title");
    String s = element.text();
    

    5. 获得标签的属性 element.attr()

    有段代码如下:

    <a id="main" href="www.baidu.com"></a>
    

    获得a标签的链接地址

    Element element = document.getElementById("main");
    String url = element.attr
    String s = element.text();
    

    6. 选择固定标签(li,p,a等)element.select("a")

    返回的是Elements数组

    例如html文件中有段代码为

    <div id="main"><a>hello world!</a></div>
    

    获得a标签的内容代码为

    Element element = document.getElementById("main");
    Elements elements = element.select("a");
    for(int i=0;i<elements.size();i++){
    	String s = elements.get(i).text();
    }
    

    获取p标签不能换行

    有段代码

    <div id="main">
    	<p>hello world</p>
    	<p>this is my name</p>
    </div>	
    

    我们由id找到了element,我们想要获得p标签的内容,怎么办呢?

    刚开始我想的也是使用select方法来选择p标签,但是,没有其作用

    正确的方法应该是使用element.text方法获得内容,但是获得的内容全是一行的(段落之间是用空格隔开的)

    我们想要每个p标签的内容独占一行,怎么办呢?

    我们直接把空格替换成 即可

    String string = element.text().replaceAll(" ","
    ");
    

    另外一种方法,如果感觉上面的方法不好用的话(有些小说原本就有些多余的空格),那么就使用下面的方法

    Element element = document.getElementById("main");
    String text = Jsoup.clean(element.html(), "", Whitelist.none(), new Document.OutputSettings().prettyPrint(false));//保存p标签换行
    

    上面的获得的内容还有&nbsp标志(html的空格标志),我们还得删除这个标志以及多余的空行

    	/**
         * 处理空行和“&nbsp;”标志
         * @param input 内容
         * @return 处理过后的结果
         */
        public static String deleteCRLFOnce(String input) {
            return input.replaceAll("((
    )|
    )[\s	 ]*(\1)+", "$1").replaceAll("&nbsp;", "");
        }
    
  • 相关阅读:
    fabric 网络操作中遇到的问题
    springBoot项目启动初始化数据
    行为验证码AJ-Captcha
    RestControllerAdvice注解无效问题
    记录美团一面问题
    关于springMVC
    作业08-集合
    选择排序
    Centos7 使用Minikube搭建Kubernetes集群
    Vscode 配置 Go语言插件
  • 原文地址:https://www.cnblogs.com/stars-one/p/10373375.html
Copyright © 2011-2022 走看看