项目源代码 https://gitee.com/fakerlove/jsoup

文章目录

  • 3. Jsoup 讲解
    • 3.1 解析Url
      • 引入依赖
      • 测试
    • 3.2 解析字符串
    • 3.3 解析文件
    • 3.4 使用dom 方式解析

3. Jsoup 讲解

3.1 解析Url

引入依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>httpclient-demo</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>11</maven.compiler.source><maven.compiler.target>11</maven.compiler.target></properties><dependencies><!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient --><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.13</version></dependency><!-- https://mvnrepository.com/artifact/org.jsoup/jsoup --><dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.13.1</version></dependency><!-- https://mvnrepository.com/artifact/commons-io/commons-io --><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.8.0</version></dependency><!-- https://mvnrepository.com/artifact/junit/junit --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.1</version><scope>test</scope></dependency><!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 --><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.11</version></dependency></dependencies></project>

测试

package com.ak.mytest;import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.junit.Test;import java.io.IOException;
import java.net.URL;public class MyTest {@Testpublic void Url(){// 解析url 地址,第一个是url,第二个是 连接超时时间try {Document document=Jsoup.parse(new URL("https://movie.douban.com/chart"),5000);String title = document.getElementsByTag("title").first().text();System.out.println(title);} catch (IOException e) {e.printStackTrace();}}
}

结果

3.2 解析字符串

package com.ak.utils;import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.util.EntityUtils;import java.io.IOException;
import java.util.ArrayList;
import java.util.Random;public class HttpUtils {public static PoolingHttpClientConnectionManager cm;public static ArrayList<String> agents;static  {// 创建连接池管理器cm = new PoolingHttpClientConnectionManager();// 设置连接数cm.setMaxTotal(100);// 设置每个主机(理解为网站,如:百度10个、网易10个)的最大连接数cm.setDefaultMaxPerRoute(10);//初始化 User-Agent 信息agents = new ArrayList<String>();// 添加 User-Agent 信息agents.add("Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36");agents.add("Mozilla/5.0 (Windows NT 5.1; U; en; rv:1.8.1) Gecko/20061208 Firefox/2.0.0 Opera 9.50");agents.add("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0");agents.add("Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2");agents.add("Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36");agents.add("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11");agents.add("Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.133 Safari/534.16");agents.add("Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36");agents.add("Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.71 Safari/537.1 LBBROWSER");agents.add("Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.84 Safari/535.11 SE 2.X MetaSr 1.0");agents.add("Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.84 Safari/535.11 SE 2.X MetaSr 1.0");agents.add("Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 UBrowser/4.0.3214.0 Safari/537.36");System.out.println("<--------- HttpUtils initialization success --------->");}/*** 获取页面源代码** @param url 网页链接* @return 页面源代码*/public static String doGetHtml(String url) {// 通过连接池获取 httpClientCloseableHttpClient httpClient = HttpClients.custom().setConnectionManager(cm).build();HttpGet httpGet = new HttpGet(url);// 伪造 User-Agent(反反爬虫)// 生成一个范围在 0-x(不包含x)内的任意正整数int agentNum = new Random().nextInt(agents.size());httpGet.addHeader("User-Agent", agents.get(agentNum));// 设置请求信息httpGet.setConfig(getConfig());// 定义 response,方便 finally 中关闭CloseableHttpResponse response = null;try {response = httpClient.execute(httpGet);// 获取并判断,状态码是否正常(正常值:200)if (response.getStatusLine().getStatusCode() == 200) {// 判断响应体是否为空,不为空则获取内容if (response.getEntity() != null) {// 获取响应体,并指定 UTF-8 编码String content = EntityUtils.toString(response.getEntity(), "utf8");return content;}}} catch (IOException e) {e.printStackTrace();} finally {// 判断并关闭 responseif (response != null) {try {response.close();} catch (IOException e) {e.printStackTrace();}}// 不关闭 httpClient,交给连接池管理}System.out.println("<--------- doGetHtml() ERROR --------->");return "";}public static RequestConfig getConfig() {RequestConfig config = RequestConfig.custom()// 创建连接的最长时间.setConnectTimeout(1000)// 获取连接最长时间.setConnectionRequestTimeout(1000)// 数据传输最长时间.setSocketTimeout(10 * 1000).build();return config;}
}

测试

@Testpublic void testString(){// 获取字符串String content= HttpUtils.doGetHtml("https://www.baidu.com");// 转移成decument 文件Document parse = Jsoup.parse(content);String title = parse.getElementsByTag("title").first().text();System.out.println(title);}

结果

3.3 解析文件

 @Testpublic  void testFile() throws IOException {Document parse = Jsoup.parse(new File("C:\\Users\\bn\\Desktop\\豆瓣.html"), "utf-8");String title = parse.getElementsByTag("title").first().text();System.out.println(title);}

结果

3.4 使用dom 方式解析

 @Testpublic void testDom(){// 解析url 地址,第一个是url,第二个是 连接超时时间try {Document document=Jsoup.parse(new URL("https://movie.douban.com/chart"),5000);// 第一个是 tagString title = document.getElementsByTag("title").first().text();// 第二个是classElements nbg = document.getElementsByClass("pl");for (Element element : nbg){System.out.println(element.text());}// 第三个是Element content = document.getElementById("content");System.out.println(content.text().length());System.out.println(title);} catch (IOException e) {e.printStackTrace();}}

结果

jsoup教程_3 Jsoup 讲解相关推荐

  1. jsoup教程_2 http-client 讲解

    项目源代码 https://gitee.com/fakerlove/jsoup 文章目录 2. http-client 讲解 2.1 get 请求 2.2 get带请求 工具类 发送请求 2.3 Po ...

  2. JSOUP 教程—— Java爬虫,简易入门,秒杀htmlparser

    转载自 JSOUP 教程-- Java爬虫,简易入门,秒杀htmlparser 关于爬虫,之前一直用做第一个站的时候,记得那时候写的 爬虫  是爬sina 的数据,用的就是 htmlparser  可 ...

  3. java jsoup解析_3使用Jsoup解析Java中HTML文件的示例

    java jsoup解析 HTML是Web的核心,无论您是通过JavaScript,JSP,PHP,ASP或任何其他Web技术动态生成的,您在Internet上看到的所有页面都是基于HTML的. 您的 ...

  4. java图片简单爬虫_[Java教程]使用jsoup进行简单的爬虫操作爬取图片

    [Java教程]使用jsoup进行简单的爬虫操作爬取图片 0 2015-12-01 17:00:27 package com.guanglan.util;import java.io.File;imp ...

  5. MPLS *** 高级教程(张洋讲解演示版)

    MPLS *** 高级教程(张洋讲解演示版) 课程目标: ü        LDP的实施和特性 ü        PE-CE路由协议以的实施,以及它们在MPLS ***中的特性: ü        如 ...

  6. Jsoup介绍||​​​​​​​jsoup解析url || Jsoup解析字符串||​​​​​​​Jsoup解析文件

    Jsoup 抓取到页面之后,还需要对页面进行解析.可以使用字符串处理工具解析页面,也可以使用正则表达式,但是这些方法都会带来很大的开发成本,所以我们需要使用一款专门解析html页面的技术. jsoup ...

  7. jsoup获得css,Jsoup代码解读之五-实现一个CSS Selector

    Jsoup代码解读之七-实现一个CSS Selector 当当当!终于来到了Jsoup的特色:CSS Selector部分.selector也是我写的爬虫框架webmagic开发的一个重点.附上一张s ...

  8. android jsoup 课程表,使用jsoup爬取数据实现android课程表

    说明:只是爬虫的一个实现案例,所以没有多做功能,只做了登录跟课表功能,课表有修改周次,单击课程显示课程详细信息等功能. 开发平台:Android Studio 界面 使用TimetableView a ...

  9. Shell最最基础教程【案例讲解】【值得收藏系列】

    Shell基础教程[案例讲解] 第1章 Shell概述 第2章 Shell解析器 第3章 Shell脚本入门 1.脚本格式 2.第一个Shell脚本:helloworld 3.第二个Shell脚本:多 ...

最新文章

  1. python游戏编程入门 免费-python游戏编程入门 python游戏编程入门课
  2. perl 远程 mysql_写的一个perl脚本,用于发送远程MySQL命令
  3. C++使用数组实现stack堆栈(附完整源码)
  4. python文本框清空_用Python制作mini翻译器
  5. SAP在Kubernetes上打造的Kyma到底是个什么东东
  6. 第二课 运算符(day10)
  7. html实现平面地图效果,HTML5 光点组成的平面和立体世界地图
  8. 什么是SQL Server中的数据库规范化?
  9. 语音信号处理基础(二)
  10. ts的小demo--贪吃蛇(尚硅谷教程笔记)
  11. 关于邮件模板的兼容性1
  12. 使用Vundle管理配置Vim的插件
  13. layui框架实战案例(8):web图片裁切插件croppers.js组件实现上传图片的自定义截取(含php后端)
  14. 淘宝网上免费注册页面的错误
  15. 常用IP地址端口对照表
  16. PHP爬虫,提取网站中的关键词,用一次正则匹配,然后再PHP数组的操作
  17. git查看函数修改历史
  18. 数字示波器的三大指标
  19. 模块讲解——time,datetime,json,os,requests
  20. 基于java web的学习平台-课程教学网站

热门文章

  1. Android Audio BSP工程师 需要清楚的基本知识点
  2. 获取Android 光感Sensor的值
  3. tensorflow之安装opencv
  4. 基于深度学习的一款五子棋小游戏
  5. python十大重点_你见过的最全面的 Python 重点
  6. linux shell脚本 可以全局使用
  7. 在pytorch中使用tensorboard
  8. 《图像分析基础》的专有名词解析
  9. java static 对象加锁_java安全编码指南之:lock和同步的正确使用
  10. 论文页眉奇偶页不同怎么设置_什么!论文排版这么简单的吗?!