【爬虫系列】第二部分 网页解析Jsoup

2024-06-09 20:38

本文主要是介绍【爬虫系列】第二部分 网页解析Jsoup,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

     在爬虫采集网页领域主要作用是HttpClient获取到网页后,使用Jsoup提取网页中需要的信息,Jsoup支持类似JqueryCSS选择器,来获取需要的数据,使用非常方便。

     下面结合代码简单展示如何使用Jsoup获取需要的页面数据。

一、Jsoup 入门demo

[java]  view plain  copy
  1. public class JsoupHello {  
  2.   
  3.     public static void main(String[] args) throws Exception{  
  4.         CloseableHttpClient httpclient = HttpClients.createDefault(); // 创建httpclient实例  
  5.         HttpGet httpget = new HttpGet("http://www.cnblogs.com/"); // 创建httpget实例  
  6.            
  7.         CloseableHttpResponse response = httpclient.execute(httpget); // 执行get请求  
  8.         HttpEntity entity=response.getEntity(); // 获取返回实体  
  9.         String content=EntityUtils.toString(entity, "utf-8");  
  10.         response.close(); // 关闭流和释放系统资源  
  11.           
  12.         Document doc=Jsoup.parse(content); // 解析网页 得到文档对象  
  13.         Elements elements=doc.getElementsByTag("title"); // 获取tag是title的所有DOM元素  
  14.         Element element=elements.get(0); // 获取第1个元素  
  15.         String title=element.text(); // 返回元素的文本  
  16.         System.out.println("网页标题是:"+title);  
  17.           
  18.         Element element2=doc.getElementById("site_nav_top"); // 获取id=site_nav_top的DOM元素  
  19.         String navTop=element2.text(); // 返回元素的文本  
  20.         System.out.println("口号:"+navTop);  
  21.            
  22.     }  
  23. }  
1、使用httpClient 获取网页

2、使用jsoup parse解析网页,并根据丰富的getElement方法按照不同的属性获取元素值

二、常用查找dom元素方法

1、根据标签名(tagName)查找dom  

[java]  view plain  copy
  1. Elements elements=  doc.getElementsByTag("title"); //获取tag是title的所有dom元素          
  2. Element element= elements.get(0); //获取第一个  
  3. System.out.println(element.text());//输出元素txt值  
2、根据元素Id查找

[java]  view plain  copy
  1. Element elementById=doc.getElementById("footer");  
  2. System.out.println(elementById.text());  
3、根据class 名查找

[java]  view plain  copy
  1. Elements elementsByClass=doc.getElementsByClass("post_item");  
  2. for(Element e:elementsByClass)  
  3. {  
  4.     System.out.println(e.html());  
  5. }  
4、根据attribute属性名查找

[java]  view plain  copy
  1. //根据属性名(如:id,width) 查询dom  
  2. Elements elementsByAttr=doc.getElementsByAttribute("width");  
  3. for(Element e2:elementsByAttr)  
  4. {  
  5.     System.out.println(e2.toString());  
  6. }  
5、根据attribute和attributeValue共同查找

[java]  view plain  copy
  1. //根据属性名&值共同查找dom  
  2. Elements elementsByAttrValue=doc.getElementsByAttributeValue("width""142");  
  3. System.out.println(elementsByAttrValue.toString());  
三、使用Jsoup选择器查找dom元素

1、class类选择器使用

[java]  view plain  copy
  1.       //class 使用.   中间空格  
  2. Elements eleLinks= doc.select(".post_item .post_item_body h3 a");     
  3. for(Element el:eleLinks)  
  4.  {  
  5.  System.out.println(el.text());  
  6.  }  
2、带有href超链接的a标签查找

[java]  view plain  copy
  1. //css语法 带有href 属性的a元素   
  2. Elements elea= doc.select("a[href]");  
  3. for(Element ea:eleLinks)  
  4.  {  
  5.  System.out.println(ea.toString());  
  6.  }  
3、查找图片标签

[java]  view plain  copy
  1. //img图片  
  2. Elements imgs= doc.select("img[src$=.png]");//查找img标签,后缀为png的所有图片dom  
  3. for(Element ea:imgs)  
  4.  {  
  5.  System.out.println(ea.toString());  
  6.  }  

4、根据dom Id查找元素

[java]  view plain  copy
  1. //根据dom id获取元素 ,text返回a的中文文本信息,html返回a标签链接信息  
  2.        Element eleId=doc.select("#friend_link").first();  
  3.        System.out.println("##############纯文本"+eleId.text());  
  4.        System.out.println("##############纯文本"+eleId.html());  

5、获取dom元素中指定属性值

[java]  view plain  copy
  1. Elements eleLinks= doc.select(".post_item .post_item_body h3 a");     
  2.    for(Element el:eleLinks)  
  3.     {  
  4.        System.out.println("***********************标题是"+el.text()); //获取所有文本  
  5.        System.out.println("***********************连接是"+el.attr("href")); //获取所有博客链接 dom a 里的属性值  
  6.     }  

这篇关于【爬虫系列】第二部分 网页解析Jsoup的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1046239

相关文章

Python使用getopt处理命令行参数示例解析(最佳实践)

《Python使用getopt处理命令行参数示例解析(最佳实践)》getopt模块是Python标准库中一个简单但强大的命令行参数处理工具,它特别适合那些需要快速实现基本命令行参数解析的场景,或者需要... 目录为什么需要处理命令行参数?getopt模块基础实际应用示例与其他参数处理方式的比较常见问http

Python利用ElementTree实现快速解析XML文件

《Python利用ElementTree实现快速解析XML文件》ElementTree是Python标准库的一部分,而且是Python标准库中用于解析和操作XML数据的模块,下面小编就来和大家详细讲讲... 目录一、XML文件解析到底有多重要二、ElementTree快速入门1. 加载XML的两种方式2.

Java的栈与队列实现代码解析

《Java的栈与队列实现代码解析》栈是常见的线性数据结构,栈的特点是以先进后出的形式,后进先出,先进后出,分为栈底和栈顶,栈应用于内存的分配,表达式求值,存储临时的数据和方法的调用等,本文给大家介绍J... 目录栈的概念(Stack)栈的实现代码队列(Queue)模拟实现队列(双链表实现)循环队列(循环数组

java解析jwt中的payload的用法

《java解析jwt中的payload的用法》:本文主要介绍java解析jwt中的payload的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java解析jwt中的payload1. 使用 jjwt 库步骤 1:添加依赖步骤 2:解析 JWT2. 使用 N

Python中__init__方法使用的深度解析

《Python中__init__方法使用的深度解析》在Python的面向对象编程(OOP)体系中,__init__方法如同建造房屋时的奠基仪式——它定义了对象诞生时的初始状态,下面我们就来深入了解下_... 目录一、__init__的基因图谱二、初始化过程的魔法时刻继承链中的初始化顺序self参数的奥秘默认

Java 正则表达式URL 匹配与源码全解析

《Java正则表达式URL匹配与源码全解析》在Web应用开发中,我们经常需要对URL进行格式验证,今天我们结合Java的Pattern和Matcher类,深入理解正则表达式在实际应用中... 目录1.正则表达式分解:2. 添加域名匹配 (2)3. 添加路径和查询参数匹配 (3) 4. 最终优化版本5.设计思

使用Java将DOCX文档解析为Markdown文档的代码实现

《使用Java将DOCX文档解析为Markdown文档的代码实现》在现代文档处理中,Markdown(MD)因其简洁的语法和良好的可读性,逐渐成为开发者、技术写作者和内容创作者的首选格式,然而,许多文... 目录引言1. 工具和库介绍2. 安装依赖库3. 使用Apache POI解析DOCX文档4. 将解析

一文详解如何在Python中从字符串中提取部分内容

《一文详解如何在Python中从字符串中提取部分内容》:本文主要介绍如何在Python中从字符串中提取部分内容的相关资料,包括使用正则表达式、Pyparsing库、AST(抽象语法树)、字符串操作... 目录前言解决方案方法一:使用正则表达式方法二:使用 Pyparsing方法三:使用 AST方法四:使用字

Java字符串处理全解析(String、StringBuilder与StringBuffer)

《Java字符串处理全解析(String、StringBuilder与StringBuffer)》:本文主要介绍Java字符串处理全解析(String、StringBuilder与StringBu... 目录Java字符串处理全解析:String、StringBuilder与StringBuffer一、St

Spring Boot循环依赖原理、解决方案与最佳实践(全解析)

《SpringBoot循环依赖原理、解决方案与最佳实践(全解析)》循环依赖指两个或多个Bean相互直接或间接引用,形成闭环依赖关系,:本文主要介绍SpringBoot循环依赖原理、解决方案与最... 目录一、循环依赖的本质与危害1.1 什么是循环依赖?1.2 核心危害二、Spring的三级缓存机制2.1 三