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);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/32081.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jeecg-boot项目的部署-windows系统

一、基础环境的准备&#xff1a; 1、后台基础环境&#xff1a;JDK、redis、数据库&#xff1a;sqlserver 2、前端基础环境&#xff1a;nginx redis和nginx的安装都很方便&#xff0c;直接去对应的官网&#xff0c;下载zip压缩包&#xff0c;然后解压&#xff0c;执行.exe文件…

一、docker简介及卸载、安装

目录 一、Docker 简介 二、dockers三要素 1、Docker镜像&#xff08;image&#xff09; 2、Docker仓库 3、Docker容器 三、docker架构图 四. Docker 运行的基本流程 五、docker 卸载 1、停止docker服务 2、查看yum安装的docker文件包 3、查看docker相关的rpm源文件 …

【Pandas驯化-11】一文搞懂Pandas中的分组函数groupby与qcut、fillna使用

【Pandas驯化-11】一文搞懂Pandas中的分组函数groupby与qcut、fillna使用 本次修炼方法请往下查看 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合&#xff0c;智慧小天地&#xff01; &#x1f387; 相关内容文档获…

常用的开源数据集网站

Kaggle&#xff08;https://www.kaggle.com/datasets&#xff09;&#xff1a;Kaggle 是一个著名的数据科学竞赛平台&#xff0c;也提供了大量的开放数据集供用户下载和使用。UCI Machine Learning Repository&#xff08;https://archive.ics.uci.edu/datasets&#xff09;&am…

k8s 离线安装calico

k8s安装calico的命令是 curl -L https://projectcalico.docs.tigera.io/manifests/calico.yaml -O kubectl apply -f calico.yaml 但是在pull calico的镜像时&#xff0c;由于一些网络原因&#xff0c;可能会导致image pull失败的错误。 可以尝试离线安装calico&#xff0c;…

基于STM32的智能工厂环境监测系统

目录 引言环境准备智能工厂环境监测系统基础代码实现&#xff1a;实现智能工厂环境监测系统 4.1 数据采集模块4.2 数据处理4.3 控制系统实现4.4 用户界面与数据可视化应用场景&#xff1a;智能工厂管理与优化问题解决方案与优化收尾与总结 1. 引言 智能工厂环境监测系统通过…

数据库系统概论——数据库恢复技术

文章目录 数据库恢复技术事务的基本概念什么是事务如何定义事务&#xff1a;事务的特性 数据库恢复概述故障的种类恢复的实现技术恢复策略事务故障的恢复系统故障的恢复介质故障的恢复 数据库恢复技术 事务的基本概念 什么是事务 事务使用户定义的一个数据库操作序列&#x…

Vue实现无限滚动加载更多内容(懒加载)或实现查看更多按钮

在Vue中实现无限滚动加载更多内容&#xff0c;通常可以使用vue-infinite-loading插件。以下是一个简单的例子&#xff1a; 1、首先&#xff0c;安装vue-infinite-loading&#xff1a; npm install vue-infinite-loading --save2、在Vue组件中使用它&#xff1a; <templat…

【设计模式之策略模式 -- C++】

策略模式 – 算法替换&#xff0c;灵活变化 策略模式&#xff08;Strategy Pattern&#xff09;是一种行为设计模式&#xff0c;它定义了一系列算法&#xff0c;并将每一个算法封装起来&#xff0c;使它们可以互相替换。策略模式让算法的变化独立于使用算法的客户。这种模式主…

Android系统 无法绑定1024以下端口问题

一&#xff0c;前言 在Android系统中&#xff0c;默认情况下&#xff0c;普通应用程序无法绑定到1024以下的端口&#xff08;即特权端口&#xff09;&#xff0c;这是出于安全考虑而设计的。这种限制是为了防止普通应用程序伪装成系统服务或者使用系统服务的特权端口&#xff…

kotlin类

一、定义 1、kotlin中使用关键字class 声明类,如果一个类没有类体&#xff0c;也可以省略花括号&#xff0c; 默认为public 类型的&#xff1a; // 这段代码定义了一个公开的、不可被继承的Test类 class Test{} // 没有类体&#xff0c;可以省略花括号 class Test 底层代码&…

2024最新IDEA插件开发+发布全流程 SelectCamelWords[选中驼峰单词](idea源代码)

2024最新IDEA插件开发&#xff08;发布&#xff09;-SelectCamelWords[选中驼峰单词]&#xff08;idea源代码&#xff09; 参考文档 Jetbrains Idea插件开发文档: https://plugins.jetbrains.com/docs/intellij/welcome.html代码地址&#xff1a;https://github.com/yangfeng…

Mybatis框架的缓存

Mybatis框架的缓存 一.为什么使用缓存 缓存(cache&#xff09;的作用是为了减去数据库的压力&#xff0c;提高查询性能。缓存实现的 原理是从数据库中查询出来的对象在使用完后不要销毁&#xff0c;而是存储在内存&#xff08;缓存&#xff09; 中&#xff0c;当再次需要获取…

windows-docker-本地部署-前端

前置条件 docker已有需要打包的文件也已经写好了 打包镜像 ip地址修改 需要根据自身修改的文件 .env.local文件存放你前端访问的端口 172.24.240.1:这部分是自己电脑的ip 如何查看本机ip&#xff0c;使用IPV4的地址。 #本地 #API_HOST_URLhttp://172.24.240.1:8091打包文…

Ubuntu下 Tailscale的安装配置与优化

今天&#xff0c;我在阿贝云的免费云服务器上进行了Tailscale的部署测试。说实话&#xff0c;这家免费云服务器真的不错,配置也算不错(1核CPU、1G内存、10G硬盘、5M带宽)。作为一个完全免费的云服务器,已经满足了我的大部分需求了,真的很感谢阿贝云提供这样一个优质的免费服务!…

Excel导出实例

在上一节的基础上&#xff0c;本文演示下如何导出excel数据。 Excel导出操作演示 继承ocean-easyexcel SDK <dependency><groupId>com.angel.ocean</groupId><artifactId>ocean-easyexcel</artifactId><version>1.0.0</version> …

架构设计 - 网站性能优化之静态资源CDN配置

摘要: web 应用业务缓存通常3级: 一级缓存:JVM 本地缓存 二级缓存:Redis集中式缓存 三级缓存:Nginx Proxy Cache 缓存 或 Nginx Lua 缓存 四级缓存:静态资源CDN缓存 页面静态化 本文主要分享 怎样通过CDN缓存静态资源的方式 提高系统性能和响应速度。 WEB应用通过CD…

【机器学习】正则卷积群理论及Python代码实现

1. 引言 1.1.卷积神经网络CNN 卷积神经网络&#xff08;CNN&#xff09;的数学模型是深度学习中用于处理图像和其他高维数据的关键组成部分。那么&#xff0c;CNN究竟是什么呢&#xff1f; 总结起来&#xff0c;CNN网络主要完成以下操作&#xff1a; 卷积操作&#xff08;Co…

【专业英语 复习】第11章 Databases

1. In the ____ database, data elements are stored in different tables, each of which consists of rows and columns. A. network B. hierarchical C. relational D. object-oriented 正确答案&#xff1a;C 在关系数据库中&#xff0c;数据元素存储在不同的表中&#xff…

无线麦克风一拖二哪个牌子好,揭秘目前音质最好的麦克风

在自媒体的世界里&#xff0c;无线领夹麦克风已经成了一种标准配置&#xff0c;它受到广大视频创作者的青睐。无论是刚刚踏入短视频领域的新手&#xff0c;还是已经拥有丰富经验的资深博主&#xff0c;都深知一款好的领夹麦克风对于提升视频音频质量的重要性。它不仅能帮助创作…