【爬虫系列】第二部分 网页解析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

相关文章

网页解析 lxml 库--实战

lxml库使用流程 lxml 是 Python 的第三方解析库,完全使用 Python 语言编写,它对 XPath表达式提供了良好的支 持,因此能够了高效地解析 HTML/XML 文档。本节讲解如何通过 lxml 库解析 HTML 文档。 pip install lxml lxm| 库提供了一个 etree 模块,该模块专门用来解析 HTML/XML 文档,下面来介绍一下 lxml 库

闲置电脑也能活出第二春?鲁大师AiNAS让你动动手指就能轻松部署

对于大多数人而言,在这个“数据爆炸”的时代或多或少都遇到过存储告急的情况,这使得“存储焦虑”不再是个别现象,而将会是随着软件的不断臃肿而越来越普遍的情况。从不少手机厂商都开始将存储上限提升至1TB可以见得,我们似乎正处在互联网信息飞速增长的阶段,对于存储的需求也将会不断扩大。对于苹果用户而言,这一问题愈发严峻,毕竟512GB和1TB版本的iPhone可不是人人都消费得起的,因此成熟的外置存储方案开

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

poj 2976 分数规划二分贪心(部分对总体的贡献度) poj 3111

poj 2976: 题意: 在n场考试中,每场考试共有b题,答对的题目有a题。 允许去掉k场考试,求能达到的最高正确率是多少。 解析: 假设已知准确率为x,则每场考试对于准确率的贡献值为: a - b * x,将贡献值大的排序排在前面舍弃掉后k个。 然后二分x就行了。 代码: #include <iostream>#include <cstdio>#incl

flume系列之:查看flume系统日志、查看统计flume日志类型、查看flume日志

遍历指定目录下多个文件查找指定内容 服务器系统日志会记录flume相关日志 cat /var/log/messages |grep -i oom 查找系统日志中关于flume的指定日志 import osdef search_string_in_files(directory, search_string):count = 0

OWASP十大安全漏洞解析

OWASP(开放式Web应用程序安全项目)发布的“十大安全漏洞”列表是Web应用程序安全领域的权威指南,它总结了Web应用程序中最常见、最危险的安全隐患。以下是对OWASP十大安全漏洞的详细解析: 1. 注入漏洞(Injection) 描述:攻击者通过在应用程序的输入数据中插入恶意代码,从而控制应用程序的行为。常见的注入类型包括SQL注入、OS命令注入、LDAP注入等。 影响:可能导致数据泄

EasyPlayer.js网页H5 Web js播放器能力合集

最近遇到一个需求,要求做一款播放器,发现能力上跟EasyPlayer.js基本一致,满足要求: 需求 功性能 分类 需求描述 功能 预览 分屏模式 单分屏(单屏/全屏) 多分屏(2*2) 多分屏(3*3) 多分屏(4*4) 播放控制 播放(单个或全部) 暂停(暂停时展示最后一帧画面) 停止(单个或全部) 声音控制(开关/音量调节) 主辅码流切换 辅助功能 屏