springboot集成webmagic和selenium,并部署到linux(问题坑)

news2024/12/23 18:44:47

springboot集成webmagic和selenium,并部署到linux(问题坑)

  • 首先参考两个源代码
  • spring boot集成
  • 找不到org.openqa.selenium.remote.AbstractDriverOptions的类文件
  • 代理ip--更换一个网页同时更换一个代理ip
  • 代理ip网址
  • 部署linux
    • 谷歌浏览器
    • 下载谷歌浏览器驱动网址(注意和浏览器的版本一致性)
    • 查看版本
    • 验证代理Ip是否可用

首先参考两个源代码

黄亿华 / webmagic
NAMEniubi / webmagic-selenium

通过以上源码可以基本了解怎么使用

spring boot集成

将Pipeline、PageProcessor、Spider进行拆分为不同类,拆分后添加@Component使其交给spring管理,使用时进行@Autowired注入

找不到org.openqa.selenium.remote.AbstractDriverOptions的类文件

集成后有时会出现找不到类的情况,是因为spring boot自带<selenium.version>版本号太老导致,需要手动添加maven依赖,这里我是用的是4.8.3版本,如下所示:(缺少哪个添加哪个即可)
在这里插入图片描述
在这里插入图片描述

        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-remote-driver</artifactId>
            <version>4.8.3</version>
        </dependency>

代理ip–更换一个网页同时更换一个代理ip

添加代理Ip池,说实话怎么添加ip在网上找到了,但是怎么实现上述目标没有找到,所以只好使用笨方法—在更换网页后手动更改当前系统代理

            System.setProperty("proxyType", "4");
            System.setProperty("proxyHost", ip);
            System.setProperty("proxyPort", 端口);
            System.setProperty("proxySet", "true");

有时候需要将代理取消,换回原有代理,执行清理系统代理

        System.clearProperty("proxyHost");
        System.clearProperty("proxyPort");
        System.clearProperty("proxyType");
        System.clearProperty("proxyType");

放置位置在==webDriver.get(request.getUrl());==之前即可

代理ip网址

当前我在用的两个免费代理网站(不过有条件的话还是建议买代理服务,免费的。。。你们懂的)
快代理
66免费代理

部署linux

谷歌浏览器

  • 配置 yum 源

在 /etc/yum.repos.d/ 目录下新建文件 google-chrome.repo

vi /etc/yum.repos.d/google-chrome.repo

写入以下内容

[google-chrome]
name=google-chrome
baseurl=http://dl.google.com/linux/chrome/rpm/stable/$basearch
enabled=1
gpgcheck=1
gpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub    
  • 安装 google chrome 浏览器
 yum -y install google-chrome-stable

Google 官方源可能在中国无法使用,导致安装失败或者在国内无法更新,可以添加以下参数来安装

yum -y install google-chrome-stable --nogpgcheck
  • 位置
    安装后位置在 /usr/bin/google-chrome

下载谷歌浏览器驱动网址(注意和浏览器的版本一致性)

chromedriver
下载linux版本,上传到服务器并解压,复制到/usr/bin下

unzip chromedriver_linux64.zip
cp chromedriver /usr/bin

在这里插入图片描述
在这里插入图片描述

查看版本

google-chrome --version
chromedriver --version

在这里插入图片描述

验证代理Ip是否可用

    //无效的ip 返回true 有效的ip返回false
    static boolean ifUselessBaidu(String ip, String port) {
        String[] split = ip.split(":");
        URL url = null;
        try {`在这里插入代码片`
            url = new URL("http://www.baidu.com");
            InetSocketAddress addr = new InetSocketAddress(ip, Integer.parseInt(port));
            Proxy proxy = new Proxy(Proxy.Type.HTTP, addr);
            InputStream in = null;
            try {
                URLConnection conn = url.openConnection(proxy);
                conn.setConnectTimeout(2000);
                in = conn.getInputStream();
            } catch (Exception e) {
                return true;
            }
            String s = IOUtils.toString(in);
            if (s.indexOf("baidu") > 0) {
                return false;
            }
            return true;
        } catch (Exception e) {
            return true;
        }
    }

    static List<String> arrs = new ArrayList<String>() {{
        add("http://ip.3322.net/");
        add("http://icanhazip.com/");
    }};
//无效的ip 返回true 有效的ip返回false
    static boolean ifUseless(String ip, String port) {
        URL url = null;
        try {
            url = new URL(arrs.get(new Random().nextInt(arrs.size())));
            InetSocketAddress addr = new InetSocketAddress(ip, Integer.parseInt(port));
            Proxy proxy = new Proxy(Proxy.Type.HTTP, addr);
            InputStream in = null;
            try {
                URLConnection conn = url.openConnection(proxy);
                conn.setConnectTimeout(2000);
                in = conn.getInputStream();
            } catch (Exception e) {
                return true;
            }
            String resultIp = IOUtils.toString(in);
//            System.out.println(ip + "----" + resultIp);
            if (resultIp.trim().equals(ip)) {
                return false;
            } else {
                return true;
            }
        } catch (Exception e) {
            return true;
        }
    }

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

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

相关文章

Python冒泡排序的实现

时间复杂度&#xff1a; 最坏时间复杂度O(n^2) 最优时间复杂度O(n):表遍历一次发现没有任何可以交换的元素&#xff0c;排序结束&#xff0c;这是最理想的 稳定性&#xff1a;稳定&#xff0c;&#xff08;执行前后没有对数据没有变化&#xff0c;位置等&#xff09; 原理和方…

供需两端催化口腔医疗服务市场增长 未来将呈现线上化、智能化、品质化三大趋势

一、口腔医疗服务行业概述 口腔由唇、颊、舌、腭、涎腺、牙和颌骨等部分组成。口腔疾病种类繁多&#xff0c;伴随人全生命周期&#xff0c;常见疾病有龋病、牙周疾病、牙髓病、根尖周病、牙齿缺损、错颌畸形等&#xff0c;多数口腔疾病的发病率高&#xff0c;诊疗需求大。除此…

深度强化学习——策略学习(3)

本文的重点&#xff1a;使用一个神经网络来近似策略函数Π 我们使用一个神经网络来近似策略函数&#xff0c;这个神经网络叫做策略网络&#xff0c;他可以用来控制agent运动&#xff0c;想要训练这个神经网络&#xff0c;就要用到policy gradient算法 策略函数Π的输入是当前…

苹果离开中国制造影响有多大?后果不堪设想,可能是灭顶之灾

由于苹果力推印度制造&#xff0c;各方都对苹果与中国制造的关系高度关注&#xff0c;那么苹果真的离开中国制造的话&#xff0c;结果会如何呢&#xff1f;对双方来说&#xff0c;影响会非常大&#xff0c;超出想象。 一、中国制造对苹果的依赖 苹果对产业链拥有巨大的影响力&a…

Python基础快速入门

一、中文编码问题 带大家过一遍菜鸟学python的基础内容 二、Python基础语法 1、Python 中的标识符是区分大小写的。 以下划线开头的标识符是有特殊意义的。以单下划线开头 _foo 的代表不能直接访问的类属性&#xff0c;需通过类提供的接口进行访问&#xff0c;不能用 from x…

用Socket API建立简易TCP服务端、客户端

//---------------------- //-- 用Socket API建立简易TCP客户端 // 1 建立一个Socket // 2 连接服务器 connect // 3 接收服务器信息 recv // 4关闭套接字 closesocket // -- 用Socket API建立简易TCP服务端 // 1 建立一个socket // 2 bind 绑…

JetBrains Gateway IDEA远程开发

为什么进行远程开发&#xff1f; 无论身处何处数秒内连接至远程环境 充分利用远程计算机的强大功能 在任何笔记本电脑上都可以轻松工作&#xff0c;无论其性能如何。借助远程计算机的计算资源&#xff0c;充分利用最大规模的数据集和代码库。在远程服务器上保护敏感代码 如果…

知识变现海哥|你为什么知识却不富有,是你不懂这个道理

要有价值观念&#xff0c;要有交换思维。商业的本质都是基于价值交换&#xff0c;你能为别人提供多少价值&#xff0c;你就能赚多少米&#xff0c;你帮助别人处理的问题越多你越有价值&#xff0c;你能成就多少人你就能被多少人成就。这是商业行为的底层逻辑。 你没赚到米 一是…

老胡的周刊(第088期)

老胡的信息周刊[1]&#xff0c;记录这周我看到的有价值的信息&#xff0c;主要针对计算机领域&#xff0c;内容主题极大程度被我个人喜好主导。这个项目核心目的在于记录让自己有印象的信息做一个留存以及共享。 &#x1f3af; 项目 nginx-ui[2] Nginx 后台管理 UI&#xff1a;…

港联证券|TMT板块全线退潮,这些个股获主力逆市抢筹

计算机、电子、传媒、通讯职业流出规模居前。 今天沪深两市主力资金净流出709.92亿元&#xff0c;其中创业板净流出218.36亿元&#xff0c;沪深300成份股净流出187.92亿元。 资金流向上&#xff0c;今天申万一级职业普跌&#xff0c;除了国防军工职业小幅上涨&#xff0c;获主…

vim编辑器使用教程

文章目录 前言一、vim 的三种工作模式二、vim 基本操作1、编辑2、复制粘贴3、撤销4、跳转5、查找和替换6、自动缩进7、分屏8、其他 三、vim 配置文件 前言 vim 是 Linux 系统内置的「文本编辑器」&#xff0c;用于查看或编辑文件的内容&#xff0c;学会使用 vim 编辑器&#x…

【ros】7.ros导航navigation(定位规划)

物竞天择&#xff0c;优胜劣汰&#xff1b;苟不自新&#xff0c;何以获存。——梁启超 文章目录 :smirk:1. ros导航:blush:2. 2d导航:satisfied:3. 3d导航 &#x1f60f;1. ros导航 ros机器人有个导航功能&#xff0c;类似自动驾驶车辆的规控部分&#xff0c;即根据地图&…

性能测试:深入理解线程数,并发量,TPS,看这一篇就够了

并发数&#xff0c;线程数&#xff0c;吞吐量&#xff0c;每秒事务数&#xff08;TPS&#xff09;都是性能测试领域非常关键的数据和指标。 那么他们之间究竟是怎样的一个对应关系和内在联系&#xff1f; 测试时&#xff0c;我们经常容易将线程数等同于表述为并发数&#xff…

短视频app搭建的技术难点是什么?

近年来&#xff0c;短视频app的流行引起了广泛关注。越来越多的企业开始投入资源来开发短视频app&#xff0c;以满足用户的需求。然而&#xff0c;短视频app的开发过程中&#xff0c;存在许多技术难点需要解决。本文将深入分析短视频app搭建的技术难点。 短视频app的意义 随着…

Centos 7 内核在线升级

目录 一、参考文档 二、升级centos内核 三、centos内核一键升级脚本 一、参考文档 1、内核版本的分类等相关信息见官网&#xff1a;https://www.kernel.org/ 2、 第三方仓库ELRepo参考官网&#xff1a;http://elrepo.org/tiki/HomePage 3、国内yum源&#xff1a;https://…

为什么大量失业集中爆发在2023年?被裁?别怕!失业是跨越职场瓶颈的关键一步!对于牛逼的人,这是白捡N+1!...

被裁究竟是因为自身能力不行&#xff0c;还是因为大环境不行&#xff1f; 一位网友说&#xff1a; 被裁后找不到工作&#xff0c;本质上还是因为原来的能力就配不上薪资。如果确实有技术在身&#xff0c;根本不怕被裁&#xff0c;相当于白送n1&#xff01; 有人赞同楼主的观点&…

如何在视频直播网站开发上集成即时聊天功能

视频直播网站开发需要考虑许多因素&#xff0c;其中一个非常重要的因素是与观众的互动。为了增强观众的参与度和留存率&#xff0c;许多视频直播网站都已经开始集成即时聊天功能。本文将介绍如何在视频直播网站开发上集成即时聊天功能&#xff0c;以提高观众的参与度和留存率。…

SQL Server基础 第五章 函数的使用(日期、字符串、时间、数学、转换等函数)

前言 在SQL Server中提供了许多内置函数&#xff0c;SQL Server中的内置函数就相当于Java、C#等编程语言中的内置API函数。按照函数种类可以分为聚合函数、数学函数、字符串函数、日期函数和时间函数、转换函数和元数据的数6种。在本章中重点讲解比较常用的4种函数&#xff0c…

python从入门到入狱系列-帮你彻底搞懂python的项目实战,爬虫获取NBA成员信息

作者&#xff1a;20岁爱吃必胜客&#xff08;坤制作人&#xff09;&#xff0c;近十年开发经验, 跨域学习者&#xff0c;目前于海外某世界知名高校就读计算机相关专业。荣誉&#xff1a;阿里云博客专家认证、腾讯开发者社区优质创作者&#xff0c;在CTF省赛校赛多次取得好成绩。…

020 - C++ 枚举

今天我们要讲的是 C 中的枚举。 enum 是 enumeration 的缩写&#xff0c;基本上可以说&#xff0c;它就是一个数值集合。如果你想要给枚举一个更实际的定义&#xff0c;它们是给一个值命名的一种方法。 所以我们不用一堆叫做 A、B、C 的整数。我们可以有一个枚举数。它的值是…