Java爬虫(一)
一、Java爬虫简介
1.1 Selenium
Selenium爬虫是一种基于浏览器自动化的爬虫技术,可以模拟用户的操作行为,实现对动态网页的爬取。
1.2 jsoup
Jsoup拥有十分方便的api来处理html文档,比如参考了DOM对象的文档遍历方法,参考了CSS选择器的用法等等。
1.3 浏览器驱动下载
下载指定的浏览器驱动,需要和自己电脑上的浏览器版本一致。
- Chrome驱动下载地址
- Microsoft Edge驱动下载地址
- Firefox驱动下载地址
二、引入依赖
<jsoup.version>1.17.2</jsoup.version><selenium-java.vesion>4.21.0</selenium-java.vesion><dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>${jsoup.version}</version></dependency><dependency><groupId>org.seleniumhq.selenium</groupId><artifactId>selenium-java</artifactId><version>${selenium-java.vesion}</version></dependency>
三、测试
import java.time.Duration;
import java.util.List;import lombok.extern.slf4j.Slf4j;import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.Dimension;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.interactions.Actions;@Slf4j
class WebCrawlerUtilTest {private static WebDriver driver;@BeforeAllpublic static void setUp() {String webdriverName = "webdriver.chrome.driver";String driverPath = "E:\\Java_Tools\\Browser_driver\\Chrome\\version_126\\chromedriver-win64\\chromedriver.exe";// 设置Chrome驱动位置System.getProperties().setProperty(webdriverName, driverPath);}@AfterEach()public void after() {ThreadUtils.sleep(Duration.ofSeconds(5));driver.quit();}@Testvoid test_open_browser() {// 加载 Chrome 浏览器驱动driver = new ChromeDriver();ThreadUtils.sleep(3);//设置访问地址String url = "https://www.baidu.com/";driver.get(url);// 新标签页打开百度新闻driver.findElement(By.linkText("新闻")).click();// 新标签页打开百度视频driver.findElement(By.linkText("地图")).click();}@Testvoid test_find_element() {// 加载 Chrome 浏览器驱动driver = new ChromeDriver();ThreadUtils.sleep(3);//设置访问地址String url = "https://www.baidu.com/";driver.get(url);// 新标签页打开百度新闻WebElement we = driver.findElement(By.xpath("//input[@id='kw']"));// 往搜索框里输入”五一“的搜索内容we.sendKeys("五一");we = driver.findElement(By.id("su"));we.click();}@Testpublic void test_find_element_2() {// 加载 Chrome 浏览器驱动driver = new ChromeDriver();ThreadUtils.sleep(3);//设置访问地址String url = "https://www.baidu.com/";driver.get(url);List<WebElement> wes = driver.findElements(By.className("title-content-title"));log.info("find_elements()返回的数据类型是:type({}})", wes);for (WebElement we : wes) {log.info(we.toString());log.info(we.getText());}}@Testpublic void test_mouse_action() {// 加载 Chrome 浏览器驱动driver = new ChromeDriver();ThreadUtils.sleep(3);//设置访问地址String url = "https://www.baidu.com/";driver.get(url);// 设置浏览器窗口的大小,driver.set_window_size(宽,高);driver.manage().window().setSize(new Dimension(1200, 800));WebElement we = driver.findElement(By.id("s-usersetting-top"));Actions action = new Actions(driver);action.moveToElement(we).perform();ThreadUtils.sleep(5);WebElement we2 = driver.findElement(By.linkText("图片"));action.contextClick(we2).perform();ThreadUtils.sleep(5);// 用于刷新当前页面driver.navigate().refresh();}@Testpublic void test_keyboard_action() {// 加载 Chrome 浏览器驱动driver = new ChromeDriver();ThreadUtils.sleep(3);//设置访问地址String url = "https://www.baidu.com/";driver.get(url);WebElement we = driver.findElement(By.id("kw"));// 模拟键盘操作we.sendKeys("五一");// 使用回车代替点击 driver.find_element(By.ID, "su")we.sendKeys(Keys.ENTER);}
}
相关文章:
Java爬虫(一)
一、Java爬虫简介 1.1 Selenium Selenium爬虫是一种基于浏览器自动化的爬虫技术,可以模拟用户的操作行为,实现对动态网页的爬取。 1.2 jsoup Jsoup拥有十分方便的api来处理html文档,比如参考了DOM对象的文档遍历方法,参考了CSS选…...
element-plus form表单组件之el-date-picker日期选择器组件
el-date-picker日期选择器组件可根据年,月,日期,时间范围来进行选择,可以自定义日期格式,和样式,还提供多种内置事件。 主要属性如下 属性名说明类型可选值默认值model-value / v-model绑定值,…...
如何与情绪好好相处,真正成为情绪的主人
一、教程描述 若要成为一个聪明的人,就要学会做情绪的主人,而不是被情绪控制自己,为什么要做情绪的主人?至少有以下两个方面原因。 其一,都说,世上还是好人多。可是,为什么你身边没有一个好人…...
RK3588/算能/Nvidia智能盒子:[AI智慧油站」,以安全为基,赋能精准经营
2021年9月,山东省应急管理厅印发了关于《全省危险化学品安全生产信息化建设与应用工作方案(2021-2022 年)》的通知,要求全省范围内加快推进危险化学品安全生产信息化、智能化建设与应用工作,建设完善全省危险化学品安全…...
【眼在手外D435相机支架】
完整UR机械臂的GRCNN抓取网络教程参考以下博客: 【眼在手外D435相机支架】 0. 【机械臂视觉抓取从理论到实战】 GRCNN抓取网络学习1【Jacquard数据集等效制作】GRCNN抓取网络学习2【自制Jacquard数据集训练】GRCNN抓取网络学习3【自制Jacquard数据集模型调优】GRCNN抓取网络学…...
js组合继承
JS组合继承(combination inheritance)是一种常用的继承模式,它通过将原型链和构造函数组合使用来实现继承。 下面是JS组合继承的详细解析和代码示例: 创建父类(基类)的构造函数 function Parent(name) {…...
Spring-kafka消费者消费的一些问题
前言 Spring Kafka 无缝集成了 Spring Boot、Spring Framework 及其生态系统中的其他项目,如 Spring Cloud。通过与 Spring Boot 的自动配置结合,开发者可以快速启动和配置 Kafka 相关的功能。无需编写大量样板代码即可实现 Kafka 的生产和消费功能&…...
【自我提升】提升能量书籍
《原子习惯》 (Atomic Habits) - 詹姆斯克利尔 (James Clear): 核心思想:微小的习惯改变可以带来显著的生活变化。方法: 将大目标拆分为可管理的小习惯。使用“习惯堆叠”技术,将新习惯与已有习惯结合。创建支持性环境,…...
python图像处理库-PIL(Pillow)
PIL库全称为Python Imaging Library,即Python图像处理库,是一个在Python中用于处理图像的非常流行的库。 一、PIL介绍 这个库提供了广泛的文件格式支持、高效的内部表示以及相当强大的图像处理功能。 核心图像库旨在快速访问存储在几种基本像素格式中的数…...
【2024】kafka streams的详细使用与案例练习(2)
目录 前言使用1、整体结构1.1、序列化 2、 Kafka Streams 常用的 API2.1、 StreamsBuilder2.2、 KStream 和 KTable2.3、 filter和 filterNot2.4、 map 和 mapValues2.5、 flatMap 和 flatMapValues2.6、 groupByKey 和 groupBy2.7、 count、reduce 和 aggregate2.8、 join 和 …...
qt 简单实验 读取json格式的配置文件
1.概要 2.代码 //#include "mainwindow.h"#include <QApplication> #include <QFile> #include <QJsonDocument> #include <QJsonObject> #include <QDebug> //读取json数据的配置文件QJsonObject readJsonConfigFile(const QString …...
Docker常用命令与实战示例
docker 1. 安装2. 常用命令3. 存储4. 网络5. redis主从复制示例6. wordpress示例7. DockerFile8. 一键安装超多中间件(compose) 1. 安装 以centOS系统为例 # 移除旧版本docker sudo yum remove docker \docker-client \docker-client-latest \docker-c…...
数据结构(基础知识)
基础概念: 数据:数据是信息的载体,是描述客观事物属性的数,字符及所有能输入到计算机中并被计算机程序识别和处理的符号的集合 数据元素:是数据的基本单位,在程序中常作为一个整体来考虑 数据对象&#…...
计算机网络:网络层 - 路由选择协议
计算机网络:网络层 - 路由选择协议 路由器的结构路由选择协议概述自治系统 AS内部网关协议路由信息协议 RIP距离向量算法RIP报文格式收敛问题 开放最短路径优先 OSPF基本工作原理自治系统分区 外部网关协议BGP-4 路由器的结构 如图所示,路由器被分为路由…...
JupyterLab使用指南(六):JupyterLab的 Widget 控件
1. 什么是 Widget 控件 JupyterLab 中的 Widget 控件是一种交互式的小部件,可以用于创建动态的、响应用户输入的界面。通过使用 ipywidgets 库,用户可以在 Jupyter notebook 中创建滑块、按钮、文本框、选择器等控件,从而实现数据的交互式展…...
OpenCV 特征点检测与匹配
一 OpenCV特征场景 ①图像搜索,如以图搜图; ②拼图游戏; ③图像拼接,将两长有关联得图拼接到一起; 1 拼图方法 寻找特征 特征是唯一的 可追踪的 能比较的 二 角点 在特征中最重要的是角点 灰度剃度的最大值对应的…...
css布局之flex应用
/*父 100*/.parent-div {/* 这里添加你想要的属性 */display: flex;flex-direction: row; //行justify-content: space-between; //左右对齐align-items: center;flex-wrap: wrap; //换行}/*中 90 10 */.middle-div {/* 这里添加你想要的属性 */display: flex;flex-direction:…...
树莓派4B设置AP热点步骤
树莓派4B设置AP热点步骤:先进入root模式 预先进行apt-get update 第1步:安装network-manager sudo apt-get install network-manager第2步:安装git apt-get install git apt-get install util-linux procps hostapd iproute2 iw haveged …...
Java程序之百鸡百钱问题
题目: 百钱买百鸡的问题算是一套非常经典的不定方程的问题,题目很简单:公鸡5文钱一只,母鸡3文钱一只,小鸡3只一文钱,用100文钱买一百只鸡,其中公鸡,母鸡,小鸡都必须要有,…...
Mybatis——动态sql
if标签 用于判断条件是否成立。使用test属性进行条件判断,如果条件为true,则拼接sql。 <where>标签用于识别语句是否需要连接词and,识别sql语句。 package com.t0.maybatisc.mapper;import com.t0.maybatisc.pojo.Emp; import org.a…...
可视化大屏开发系列——页面布局
页面布局是可视化大屏的基础,想要拥有一个基本美观的大屏,就得考虑页面整体模块的宽高自适应,我们自然就会想到具有强大灵活性flex布局,再借助百分比布局来辅助。至此,大屏页面布局问题即可得到解决。 可视化大屏开发系…...
Python statistics 模块
Python 的 statistics 模块提供了一组用于执行各种统计计算的函数,包括平均值、中位数、标准差、方差以及其他统计量。让我来简单介绍一下。 首先,你可以使用以下方式导入 statistics 模块: python import statistics 接下来,…...
wireshark常见使用表达式
目录 1. 捕获过滤器 (Capture Filters)基本捕获过滤器组合捕获过滤器 2. 显示过滤器 (Display Filters)基本显示过滤器复杂显示过滤器协议特定显示过滤器 3. 进阶显示过滤器技巧使用函数和操作符逻辑操作符 4. 常见网络协议过滤表达式示例HTTP 协议HTTPS 协议DNS 协议DHCP 协议…...
用Java获取键盘输入数的个十百位数
这段Java代码是一个简单的程序,用于接收用户输入的一个三位数,并将其分解为个位、十位和百位数字,然后分别打印出来。下面是代码的详细解释: 导入所需类库: import java.util.Scanner;:导入Scanner类,用于从…...
第10章 启动过程组 (制定项目章程)
第10章 启动过程组 9.1制定项目章程,在第三版教材第356~360页; 文字图片音频方式 视频12 第一个知识点:主要输出 1、项目章程(重要知识点) 项目目的 为了稳定与发展公司的客户群(抽象,非具体) 可测量的项目…...
html侧导航栏客服栏
ico 替换 ICO <html xmlns"http://www.w3.org/1999/xhtml"><head><meta http-equiv"Content-Type" content"text/html; charsetutf-8"><title>返回顶部</title><script src"js/jquery-2.0.3.min.js"…...
Clonable接口和拷贝
Hello~小伙伴们!本篇学习Clonable接口与深拷贝,一起往下看吧~(画图水平有限,两张图,,我真的画了巨久,求路过的朋友来个3连~阿阿阿~~~) 目录 1、Clonable接口概念 2、拷贝 2、1浅拷贝 2、2深拷贝 1、Clon…...
关于小蛋の编程和小蛋编程为同一作者的说明
小蛋の编程和小蛋编程的作品为同一人制作,因前者为父母的手机号进行注册,现用本人手机号注册了新账号小蛋编程,后续文章将在新账号小蛋编程上进行刊登,同时在小蛋编程上对原账号文章进行转载。此账号不再发布帖子,请大…...
大数据平台之Spark
Apache Spark 是一个开源的分布式计算系统,主要用于大规模数据处理和分析。它由UC Berkeley AMPLab开发,并由Apache Software Foundation维护。Spark旨在提供比Hadoop MapReduce更快的处理速度和更丰富的功能,特别是在处理迭代算法和交互式数…...
How to use ModelSim
How to use ModelSim These are all written by a robot Remember, you can only simulate tb files....
湖北武汉网站建设/国际新闻最新消息2022
放眼整个人类历史,互联网对人类文明的影响怎么评价也不为过的,而其发端不过是实验室的产物。所以,一开始根本没有考虑运营的问题,如与质量相关的带宽、时延等QOS技术根本没有考虑,由于设计的理念和先天不足,…...
ps网站参考线怎么做/推广公司经营范围
GIF gif中快捷键 执行sql ctrlenter 作用 比如ip之类的参数需要使用. 这样每次可以用 ${ip} 表示,然后dataGrip根据语法自动识别该变量,就算sql中多次使用,你通过参数 P 按钮修改一次,全局生效. 提高便利性....
徐州网站建设找哪家/全国疫情高峰感染进度查询
前言:部分参考自https://www.bilibili.com/video/BV1NE411Q7Nx?p20 文章目录ResultMap结果集映射一、解决属性名和字段名不一致的问题1、问题背景2、解决方法方法1:AS指定别名方法2(推荐):ResultMap结果集映射3、Resu…...
做视频怎么去除网站/网络推广和竞价怎么做
1.http://www.cssmoban.com/ 转载于:https://www.cnblogs.com/yangchunlong/p/9841718.html...
网站对企业的作用/深圳网络公司推广
初学python 练习demo(字典) java中map 字典的每个键值 key>value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中 ,格式如下所示: d {key1 : value1, key2 : value2 }studentList {}; …...
自己做的网站能赚钱吗/seo软件开发
前言 现在的前端开发已经不再仅仅只是静态网页的开发了,日新月异的前端技术已经让前端代码的逻辑和交互效果越来越复杂,更加的不易于管理,模块化开发和预处理框架把项目分成若干个小模块,增加了最后发布的困难,没有一…...