jsoup 选择器(一)常规选择器

jsoup 选择器(一)常规选择器

一 简单选择器

1.ID选择器 获取一个ID 为xx的元素的DOM 对象

2.元素名选择器 获取所有xx元素的DOM 对象

3.类(class)选择器 获取class 为xx的所有DOM 对象

二 进阶选择器

1.群组选择器 获取多个选择器的DOM 对象

2.后代选择器 获取追溯到的多个DOM 对象

3.通配选择器 获取所有匹配元素标签的DOM 对象


三 高级选择器


1.子选择器 只获取子类节点的多个DOM 对象

2.属性选择器

 

import java.io.File;
import java.io.IOException;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;

/**
 * 
 * @author InJavaWeTrust
 *
 */
public class TestJsoup {
	
	public static void main(String[] args) {
		File file = new File("E:\\InJavaWeTrust\\jsoup\\testJsoup.html");
		try {
			Document document = Jsoup.parse(file, "UTF-8");
			//////////////////简单选择器//////////////////////
			//1.简单选择器 ID选择器<获取一个ID为222的元素的DOM 对象>
			Elements p = document.select("#222");
			System.out.println(p.text());
			//2.简单选择器  元素名选择器 <获取所有a元素的DOM 对象>
			Elements a = document.select("a");
			System.out.println(a.text());
			//3.简单选择器 类(class)选择器 <获取class 为class222的所有DOM 对象>
			Elements div = document.select(".class222");
			System.out.println(div.text());
			
			///////////////////进阶选择器/////////////////////
			
			//1.进阶选择器 群组选择器 <获取多个选择器的DOM 对象>
			Elements em = document.select("em,strong");
			System.out.println(em.text());
			//2.进阶选择器 后代选择器 <获取追溯到的多个DOM 对象>
			Elements hd =document.select("ul div a"); 
			System.out.println(hd.text());
			//3.进阶选择器 通配选择器 <获取所匹配元素标签的DOM 对象>
			Elements tp = document.select("span.abc*");
			System.out.println(tp.text());
			
			///////////////////高级选择器/////////////////////
			//1.高级选择器 子选择器 <只获取子类节点的多个DOM 对象>
			Elements z = document.select("ul>big");
			System.out.println(z.text());
			//2.高级选择器 属性选择器
			Elements sx1 = document.select("label[id]"); //获取具有这个属性的DOM 对象
			System.out.println(sx1.text());
			Elements sx2 = document.select("label[for=man]"); //获取具有这个属性=这个属性值的DOM 对象
			System.out.println(sx2.text());
			Elements sx3 = document.select("label[for^=male]"); //获取具有这个属性且开头属性值匹配的DOM 对象
			System.out.println(sx3.text());
			Elements sx4 = document.select("label[for$=sa]"); //获取具有这个属性且结尾属性值匹配的DOM 对象
			System.out.println(sx4.text());
			Elements sx5 = document.select("label[for!=usa]"); //获取具有这个属性且不等于属性值的DOM 对象
			System.out.println(sx5.text());
			Elements sx6 = document.select("label[for~=c]"); //获取具有这个属性且属性值是以一个空格分割的列表,其中包含属性值的DOM 对象
			System.out.println(sx6.text());
			Elements sx7 = document.select("label[for*=yy]"); //获取具有这个属性且属性值含有一个指定字串的DOM 对象
			System.out.println(sx7.text());
			Elements sx8 = document.select("label[for][abc=fdfd]"); //获取具有这个属性且属性值匹配的DOM对象
			System.out.println(sx8.text());
			
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}

 

 

运行结果:

 

ID选择器222
元素名选择器 后代选择器
类(class)选择器2
群组选择器1 群组选择器2
后代选择器
评论 通配选择器
子选择器1 子选择器2
abc
man
Male
usa
abc man Male c s a xx yy zz sss
c s a
xx yy zz
sss

 

testJsoup.html

 

 

Java Jsoup 与 Selenium 对比:3 种动态网页数据抓取方案性能实测 本文对比了Java中Jsoup静态解析、Selenium动态渲染及Jsoup+API混合三种网页数据抓取方案,通过携程旅游网案例实测各方案在开发复杂度、执行效率、资源消耗和反爬虫规避能力等维度的表现差异,为开发者提供技术选型建议。 阅读详情

相关推荐

jsoup常规选择器详解与实战应用

htmltable {th, td {th {pre {简介:jsoup是一个强大的Java HTML解析库,支持使用类似CSS的选择器语法来查找和操作DOM元素。本文系统介绍了jsoup中的九种常用选择器,包括类选择器、ID选择器、标签选择器、后代选择器、子元素选择器、相邻兄弟选择器、通用选择器、属性选择器及组合选择器,并结合代码示例演示其在实际HTML文档中的数据提取方法。

weixin_36364707的博客 354

Jsoup进阶选择器

package com.open1111.jsoup; import org.apache.http.HttpEntity;import org.apache.http.client.methods.CloseableHttpResponse;import org.apache.http.client.methods.HttpGet;import org.apache.http.imp...

weixin_30765319的博客 97

Java网络爬虫项目实战:代码与技术要点

在信息爆炸的时代,网络爬虫技术已经成为获取互联网数据的重要手段。Java网络爬虫是指使用Java语言编写,自动抓取万维网上信息的程序或脚本。它们能够模拟人类或浏览器的行为,访问目标网页,提取所需数据,并可能将其存储在数据库或其他形式中。Jsoup是Java中用于处理HTML的一个库,它的主要作用是提供一个简单而强大的方法来解析和操作HTML文档,这使得它在爬虫开发中非常有用。

weixin_31961675的博客 2174

jSoup Cookbook-提取数据 7 使用选择器语法查找元素

问题 采用CSS或类似jquery 选择器(selector)语法来处理HTML文档中的数据。 方法 利用方法:Element.select(String selector)和Elements.select(String selector)。 File input = new File("/tmp/input.html"); Document doc = ...

yangshen998 418

QT-使用ECharts显示地图,还有更多惊艳的图表等待你的使用

QT-使用ECharts显示地图前言一、使用步骤1.下载示例2. QT使用HTML文件配置3.使用HTML文件4. 数据交互及自适应总结注意:这个地图是百度的在线地图,需要百度API密钥和在联网的状态下使用。离线使用图表 前言 我上文QT图表chart-饼状图,使用qt自带的图表库charts来显示图表,实现数据可视化,但是QT自带的图表库显示效果并不佳,通俗说,就是不好看。 然而,有这么一个开源图表库,图表种类极多,并且效果良好,能够实现具有很好的视觉冲击的数据可视化。 它就是Apache ECharts

博咯的博客 4900

Adams与Matlab联合仿真入门:从零搭建你的第一个动力学模型

本文为Adams与Matlab联合仿真新手提供了一份详尽的入门指南。文章从软件环境配置、版本兼容性检查讲起,逐步演示了如何在Adams中构建单摆动力学模型并定义输入输出接口,以及在Matlab/Simulink中搭建控制回路。通过一个完整的受控单摆实例,手把手教你完成从模型导出、模块生成到执行联合仿真的全流程,帮助你快速搭建并运行第一个联合仿真模型,实现动力学与控制系统的协同验证。

g5h6i7j的博客 700

crawler_jsoup HTML解析器_使用选择器语法来查找元素

参照:http://www.open-open.com/jsoup/selector-syntax.htm 使用选择器语法来查找元素 问题 你想使用类似于CSS或jQuery的语法来查找和操作元素。 方法 可以使用Element.select(String selector)和Elements.select(String selector)方法实现: File input = n...

weixin_30825199的博客 512

【规则引擎连载3】 WebSphere ILOG JRules 开发——新建一个规则项目

规则项目依赖于bom,bom来自于一个Java项目,所以在建规则项目之前,需要先建立一个Java项目,也就是建模。 说明:原则上是一个规则项目,一个bom。如果规则项目很多,并且每个规则项目的bom都是一样的,那么可以将bom提取出来,单独作为一个项目,这样减少不必要的重复操作,减少维护成本,降低出错几率。这里逐步讲解两种方法来创建规则项目,推荐第二种。 本文主要建立两种规则项目与bom之间的关系,编写相关的规则内容,如操作规则、规则流、决策表等,在后续文章中详细讲解 。

manman的分享 2331

java jsoup 网络爬虫 jsoup解析html Java爬虫 Jsoup爬虫 jsoup例子

java jsoup 网络爬虫 java jsoup 网络爬虫 学习例子(一)抓取豆瓣电影名称+推荐星级 java jsoup 网络爬虫 学习例子(二)只抓取豆瓣电影5星(力荐)电影名称 java jsoup 网络爬虫 学习例子(三)抓取豆瓣电影海报图片 下载到本地 java jsoup 网络爬虫 学习例子(四)抓取网页连接插入mysql数据库 java ...

18万+

数字锁相环的原理与FPGA实现

数字锁相环是锁相环电路的全数字实现。锁相环电路能够实现对输入信号的相位进行跟踪,进而在噪声中提取纯净的有用信号。以上就是今天要讲的内容,本文简单地介绍了锁相环的原理,然后,在Vivado仿真平台上,通过verilog做仿真验证。最终仿真结果能够实现锁定,但锁定时间较长,表明参数仍可做调整。

weixin_45857378的博客 8511

156、手机摄像头模组结构拆解:从保护盖到 FPC 连接器的完整装配剖面

本文深入解析手机摄像头模组结构设计要点。作者结合项目经验,指出保护盖密封胶在低温收缩会导致边缘漏光问题,强调结构细节比算法参数更关键。文章逐层拆解模组组件:保护盖厚度需平衡抗冲击与光学性能;镜筒内镜片组装配顺序和公差控制直接影响成像质量;IR滤光片厚度公差±0.02mm会改变红外截止波长;CSP封装需注意金线加固;FPC连接器的信号完整性和机械可靠性设计。最后给出5条实用建议,包括密封胶选型、镜片对位检测等,强调模组结构设计是"一票否决制"的基础工程。(149字)

sundong_81的博客 107

很快啊,基于jsoup的java爬虫

基于jsoup的java爬虫,爬取网站图片内容。

2378

Qt for WebAssembly环境搭建

一、前言 二、Ubuntu 1、在线安装Qt15 在线安装下载器:https://download.qt.io/official_releases/online_installers/ 安装时记得勾选WebAssembly,如下: 2、安装依赖 # Install Python sudo apt-get install python2.7 # Install CMake (optional, only needed for tests and building Binaryen) sudo apt

贝勒里恩的博客 3670

[x-cmd] jsoup 1.22.1 版本发布,引入 re2j 引擎,让 HTML 解析更安全高效

jsoup 1.22.1版本发布,重点提升HTML解析的安全性和性能。主要更新包括:引入re2j正则引擎确保线性时间复杂度的CSS选择器匹配;新增可配置的解析深度限制防止堆栈溢出;修复HttpClient代理失效、内存泄漏等关键Bug。该版本还优化了内存占用,全面支持JDK 25,并改进了与HTML5规范的兼容性。这些改进使jsoup在处理用户输入和复杂网页时更加安全可靠,特别适合安全敏感型爬虫和高并发数据清洗场景。

edwinjhlee的博客 1167

Pulseaudio之同步/异步(十一)

PulseAudio是一个声音服务器,一个后台进程从一个或多个音源(进程或输入设备)接受声音输入 然后重定向声音到一个或多个槽(声卡,远程网络PulseAudio服务,或其他进程)。 PulseAudio的主要特点包括: 可对每一个应用程序进行音量控制Per-application volume controls 可扩展的插件与支持可装载模块架构 兼容性许多流行的音频应用程序 支持多重音源和多重输出 低延时操作和支持延迟测量 一个对处理器资源效率零拷贝内存架构 能够发现本地网络上使用PulseAu

Android系统攻城狮 1003

避坑指南!YOLO26模型导出/推理常见问题,99%的开发者都踩过

版本锁定:Ultralytics=8.4.2、OpenVINO=2024.0.0、Python=3.10,版本不一致是80%问题的根源;参数对齐:训练/导出/推理的imgsz、归一化、坐标映射必须完全一致,差一步就出错;算子统一:避免自定义算子,优先用YOLO26原生算子(C3k2/PSABlock),确保推理引擎兼容;分步验证:导出后先校验ONNX/IR模型→单图片推理→RTSP流推理→72小时稳定性测试,一步过易踩坑;工业级测试。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 511

jsoup用法

1.三种途径来加载Document:字符串,URL地址,文件String str="jsoup"; //----------------------将String转换成Document---------------------- Document doc = Jsoup.parse(str); //1. //2. //白名单列表定义了哪些元素和属性可以通过清洁器,其他的元素和属性一律移除

tb_520的博客 654

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

深入分析XPath与CSS选择器在爬虫中的应用

XPath是一种用于在XML文档中查找信息的语言,后来被HTML文档的解析所广泛使用。XPath可以通过路径的形式来定位HTML文档中的元素。路径表达式:XPath使用类似于文件路径的表达式来定位节点。运算符:XPath支持多种运算符,如//等,用于选择节点、属性及其值。在爬虫开发中,选择XPath还是CSS选择器取决于网页结构的复杂度和具体需求。XPath适用于复杂、层级多的数据提取,而CSS选择器在简单、常见元素定位上更加高效且易用。

一碗黄焖鸡三碗米饭的博客 1488

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Jsoup解析Html教程

Jsoup解析Html教程 /Java /Jsoup解析Html教程  2014年4月2日  飞翔的拖鞋up  Java  2条评论 分享到:Google+QQ空间QQ好友新浪微博更多 Jsoup应该说是最简单快速的Html解析程序了,完善的API以及与JS类似的操作方式,为Java的Html解析带来极大的方便,结合多线程适合做一些网络数据的抓取,本文从一下几个

花花公子 1037

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

css 解析器 java_Atitit.html解析器的选型?jsoup?nsoup?,java?c#?.net?版本_html/css_WEB-ITnose...

Atitit.html解析器的选型 jsoup nsoup ,java c# .net 版本1. 框架选型的要求11.1. 文档多11.2. 跨平台12. html解析器特性:12.1. jQuery 风格的 CSS 选择器12.2. 操作 HTML 文档.13. 浏览器解析html的原理以及防止乱码24. 把meta标签放在head区域的最前面45. HTML解析器46. 参考86.1.1. a...

weixin_36131590的博客 205

探秘jspoon:轻量级HTML解析新星

探秘jspoon:轻量级HTML解析新星 在当今这个信息爆炸的时代,数据无处不在,特别是以HTML形式呈现的网页数据。对开发人员而言,高效地解析这些数据成为了必备技能之一。今天,我们就来一起探索一款名为jspoon的Java库,它为开发者提供了全新的HTML到Java对象的解析途径,让我们解析网页如同SELECT查询一样简单。 项目介绍 jspoon是一个基于CSS选择器的Java库,能够将HTM...

gitblog_00636的博客 513

Java调用Google搜索的轻量级HTTP实现方案

HTTP GET是Web数据获取最基础的协议机制,其核心在于构造合法请求头、处理重定向与解析响应体。在Java生态中,结合Jsoup进行HTML结构化提取,可绕过浏览器自动化(如Selenium)的高开销与不稳定性,实现低延迟、低内存、高可控的数据采集链路。该方案本质是服务端渲染(SSR)结果的直接消费,适用于竞品监控、知识图谱构建及内部工具开发等场景。关键技术点包括User-Agent伪装、URL参数精细化控制(hl/gl/num)、Google跳转链接解析及DOM选择器容错设计——这些正是‘Java H

weixin_33552698的博客 275

Java爬虫框架

不过它的短板也很明显,缺乏分布式支持,线程管理要自己实现,遇到动态渲染的页面就无能为力了。把动态请求交给Selenium处理,静态页面用WebMagic调度,数据提取用Jsoup,这样既保证了效率又控制了资源消耗。特别要注意的是线程池参数的调优,最大线程数不是越大越好,要根据目标网站的响应速度动态调整。HttpClient作为老牌HTTP组件,虽然很多框架都把它封装起来了,但直接使用的情况还是很多。不过对于大多数常规需求,现有的Java爬虫框架已经完全够用了,关键是要根据具体场景做好技术选型。

2509_93941743的博客 1044

AI工具调用技术:拓展智能边界与实战应用

工具调用(Tool Calling)是AI应用开发中的关键技术,它通过请求-执行-反馈的协作模式,使AI系统能够安全地访问外部资源和能力。这项技术的核心原理是将AI的意图识别能力与外部工具的执行能力相结合,既扩展了AI的功能边界,又保证了系统安全性。在工程实践中,工具调用常用于实时数据获取、系统集成、复杂计算等场景,如通过Jsoup实现网页数据抓取,或使用LangChain4j框架标准化工具接口。通过合理设计工具描述和参数规范,开发者可以构建出高效可靠的AI工具链,显著提升智能应用的实用价值。

weixin_33675507的博客 358
上一篇: java jsoup 网络爬虫 学习例子(二) 只抓取豆瓣电影5星(力荐)电影名称 jsoup解析html
下一篇: java jsoup 网络爬虫 学习例子(三)图片 下载到本地
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值