Jsoup+HttpClient爬取网页指定内容

最近学习了Jsoup,做一些必要的笔记,一来是对自己学习的知识的巩固,二来对有同样问题的人有参考作用


文章目录

        • 一 Jsoup简介
        • 二 Jsoup主要功能
        • 三 获取元素常用方法
        • 四 爬取网页内容举例
        • 五 总结


一 Jsoup简介

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

二 Jsoup主要功能

  1. 从一个URL,文件或字符串中解析HTML;
  2. 使用DOM或CSS选择器来查找、取出数据;
  3. 可操作HTML元素、属性、文本;

    注意:jsoup是基于MIT协议发布的,可放心使用于商业项目。

三 获取元素常用方法

Document doc = Jsoup.parse(content); // 解析网页 得到文档对象
doc.getElementsByTag("title"); // 获取tag是title的所有DOM元素
doc.getElementById("nav_top");  // 获取id=nav_top的DOM元素
doc.getElementsByClass("card"); // 根据样式名称来查询DOM元素
doc.getElementsByAttribute("width"); // 根据属性名来查询DOM元素
doc.getElementsByAttributeValue("target", "_blank"); // 根据属性名和属性值来查询DOM元素
doc.select(".columns .column h1 a"); // 通过选择器查找DOM元素

Element e = linkElements.first();
e.text(); // 获取DOM元素文本
e.attr("href"); //获取DOM元素属性值

四 爬取网页内容举例

     以爬取某博客页面的所有博客标题以及对应的博客链接为例。

  1. 网页内容
    Jsoup+HttpClient爬取网页指定内容_第1张图片
  2. 需要的包
<dependencies>

     <!-- 添加httpclient支持 -->
     <dependency>
         <groupId>org.apache.httpcomponents</groupId>
         <artifactId>httpclient</artifactId>
         <version>4.5.2</version>
     </dependency>

     <!-- 添加Jsoup支持 -->
     <dependency>
         <groupId>org.jsoup</groupId>
         <artifactId>jsoup</artifactId>
         <version>1.10.2</version>
     </dependency>
        
</dependencies>
  1. 完整代码
/**
 * @author ys
 * @version 2.0
 * @date 2020/5/24 11:46
 * @decs: 使用选择器语法查找DOM元素
 */
public class Demo4 {

    public static void main(String[] args) throws Exception {
        CloseableHttpClient httpClient = HttpClients.createDefault(); // 创建httpclient实例
        HttpGet httpGet = new HttpGet("https://www.zhjynet.cn/"); // 创建httpGet实例
        httpGet.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36");
        CloseableHttpResponse response = httpClient.execute(httpGet); // 执行get请求
        HttpEntity entity = response.getEntity(); // 获取返回实体
        String content = EntityUtils.toString(entity, "utf-8"); // 获取网页内容
        response.close();

        Document doc = Jsoup.parse(content); // 解析网页 得到文档对象

        Elements linkElements = doc.select(".columns .column .card .card-content h1 a"); // 通过选择器查找所有博客的标题
        for (Element e : linkElements){
            System.out.println("博客标题;"+e.text()); // 获取文本内容
            System.out.println("博客链接:"+e.attr("href")); // 获取特定属性值
        }
    }
    
}
  1. 爬取结果
    Jsoup+HttpClient爬取网页指定内容_第2张图片

五 总结

   如有错误恳请指正,如有侵权请联系我删除

你可能感兴趣的:(爬虫建站)