【Java-Crawler】爬取动态页面(WebMagic、Selenium、ChromeDriver)

这篇具有很好参考价值的文章主要介绍了【Java-Crawler】爬取动态页面(WebMagic、Selenium、ChromeDriver)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


在上一篇说WebMagic框架的时候( 一文学会WebMagic爬虫框架),提到了WebMagic仅能解析静态页面,满足不了小编的爬虫需求了,小编现在要爬取动态的页面,需要爬取JavaScript被解析后的页面了。

一、需要下载的资源和引入的依赖

资源

“多的不说,少的不辣”,先直接给出本篇博客需要的资源和依赖。

java爬取动态网页,Java爬虫,爬虫,java,selenium根据GPT的答案所述:114.0.5735.16 对应的Google浏览器版本应该是 94.0.4606.61,所以咱下载的Google浏览器版本得是 94.0.4606.61 版本的。下面是其下载网盘链接。

链接:https://pan.baidu.com/s/1eMnn-phueE5yZgCdoEQOwA?pwd=tk0w
提取码:tk0w

下载驱动有两种方式,一种是去ChromeDriver官网,一种是去ChromeDriver官方下载地址,咱选择后者,因为后者不需要考虑版本对应问题,ChromeDriver对应什么版本Google对应就是什么版本,而且上面人GPT也说了,后者下载的更加稳定。

java爬取动态网页,Java爬虫,爬虫,java,selenium
注意:下载完的驱动会有一个chromedriver.exe,然后需要把它放到C:\Windows\System32目录下,以便运行代码的时候可以找到。当然这种比较局限,一般System.setProperty("webdriver.chrome.driver", chromedriver.exe的路径);来指定。当然前者在本机上方便点。

依赖

首先这里是拿Maven去创建模块去测试的,下面给出需要的依赖。

首先既然需要使用 WebMagic 框架,那就要添加其相关依赖(一个是核心依赖、一个是拓展依赖,他们内部还使用了一个工具包commons-lang,咱得加进去)。

        <dependency>
            <groupId>us.codecraft</groupId>
            <artifactId>webmagic-extension</artifactId>
            <version>0.5.3</version>
        </dependency>

        <dependency>
            <groupId>us.codecraft</groupId>
            <artifactId>webmagic-core</artifactId>
            <version>0.5.3</version>
        </dependency>
        <!--工具包(StringUtils)-->
        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.6</version>
        </dependency>

然后为了获取动态页面代码,咱得使用 Selenium 测试,还需要远程调试 Google Chrome 浏览器,为了允许开发者通过HTTP协议与Chrome浏览器通信,所以需要远程调试协议:Chrome DevTools协议,而selenium-devtools-v86依赖则提供了该协议的集成。所以需添加以下依赖(selenium-devtools-v86是selenium-java的一个依赖项,版本号要一致,不然没作用):

        <!--非常重要-->->
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-devtools-v86</artifactId>
            <version>4.0.0-beta-2</version>
        </dependency>

        <!--版本和devtools一致-->
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>4.0.0-beta-2</version>
        </dependency>

最后咱需要一个强大的Java工具库,guava(噶哇)。

        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>31.1-jre</version>
        </dependency>

至此需要的资源和依赖就欧了,接下来就是实战了。

二、实战代码

  1. Spider(蜘蛛)容器配置、管理、开启;
  2. 创建 ChromeDriver 驱动对象,可根据需要向上转型为 WebDriverJavascriptExecutor
  3. 模拟打开对应网页,可通过 page.getUrl.toString() 获取 url字符串;
  4. 然后通过 ChromeDriver 对象去获取对应的 WebElement 对象;
  5. 然后通过webElement.getAttribute("outerHTML")获得原始html字符串,构造 Html 对象,剩下的就是 WebMagic 框架一样的操作了。

    关闭、退出 ChromeDriver 驱动。
public class CompanyProcessor implements PageProcessor {


    private Site site = Site.me()
    .setRetryTimes(3)
    .setRetrySleepTime(3000)
    .setSleepTime(1000)
    .setTimeOut(3000);

    public void process(Page page) {

        // 创建ChromeDriver实例对象
        ChromeDriver driver = new ChromeDriver();
        // 去模拟浏览器输入url后敲回车
        driver.get(page.getUrl().toString());
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        // 获取body下的标签内容
        WebElement webElement = driver.findElement(By.tagName("body"));
        // 模拟点击事件,因为有的时候不通过一些外设操作有些html代码是不会出现的,就爬不了了
        WebElement element = webElement.findElement(By.cssSelector("span[event-type='15']"));
        element.click();
		
		// 不知道是不是多线程run的原因,这里点击完要等一会儿,不然后面获取点击后的代码没有		
		try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
			
        // 获取其body下的原始html字符串,只含指定webElement下的内容
        String str = webElement.getAttribute("outerHTML");
        
        // 将上面得出来的字符串转换成Html对象
        // 其构造生成的是通过 Jsoup 解析对Html对象内部属性document进行初始化的
        Html html = new Html(str);
        System.out.println(html.xpath("//tbody/tr").all());
        // 关闭驱动,退出驱动
        driver.close();
        driver.quit();

    }

    public Site getSite() {
        return site;
    }

    public static void main(String[] args) {
        Spider.create(new CompanyProcessor())
                .addUrl("https://we.51job.com/pc/search?keyword=java&searchType=2&sortType=0&metro=")
                .thread(5)
                .run();
    }
}

测试效果

已经可以获取到职位链接和职位相关信息了。

java爬取动态网页,Java爬虫,爬虫,java,selenium文章来源地址https://www.toymoban.com/news/detail-642421.html

到了这里,关于【Java-Crawler】爬取动态页面(WebMagic、Selenium、ChromeDriver)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • selenium 动态爬取页面使用教程以及使用案例

    Selenium是一款功能强大的自动化Web浏览器交互工具。它可以模拟真实用户在网页上的操作,例如点击、滚动、输入等等。Selenium可以爬取其他库难以爬取的网站,特别是那些需要登录或使用JavaScript的网站。Selenium可以自动地从Web页面中提取数据,例如价格、评论、评分等等。

    2024年02月09日
    浏览(37)
  • python爬取动态加载页面,selenium实现滚动到底

    最近的写爬虫的时候遇到一些问题,就是页面是动态加载的,抓包的时候发现页码不规律,于是想到用selenium控制浏览器自动拖拽滚动到底,找了好多方法直接是加载js的不太好用,看到一个博主的能用方法,我把他贴一下。 selenium实现无限滚动、循环滚动到底 这是我自己更

    2024年02月11日
    浏览(42)
  • Python爬虫入门系列之Selenium实现动态页面爬取

    在前一篇博客中,我们学习了如何使用多线程优化爬虫程序。但是,如果要爬取的网页是动态生成的或者包含大量JavaScript代码,单纯的静态页面爬取就不足够了。为了解决这个问题,我们可以使用Selenium库来模拟真实的浏览器行为,从而实现动态页面的爬取。 Selenium是一个用

    2024年02月11日
    浏览(35)
  • Selenium+Chrome Driver 爬取搜狐页面信息

    安装selenium包 在命令行或者 anaconda prompt 中输入 pip install Selenium 安装 chromedriver 先查看chrome浏览器的版本 这里是 123.0.6312.106 版 然后在 http://npm.taobao.org/mirrors/chromedriver/ 或者 https://googlechromelabs.github.io/chrome-for-testing/ 中下载对应版本的 chromediver 由于没有106版的这里下的是105版

    2024年04月26日
    浏览(33)
  • 用Scrapy和Selenium爬取动态数据

    文章参考千锋教育大佬的课程: https://www.bilibili.com/video/BV1QY411F7Vt?p=1vd_source=5f425e0074a7f92921f53ab87712357b ,多谢大佬的课程   因为TB网的搜索功能需要登录之后才能使用,所以我们要通过程序去控制浏览器实现登录功能,然后再获取登录之后的Cookie.   首先创建一个Chrome浏览

    2024年02月02日
    浏览(29)
  • python爬虫实战 scrapy+selenium爬取动态网页

    最近学习了scrapy爬虫框架,想要找个目标练练手。由于现在很多网页都是动态的,因此还需要配合selenium爬取。本文旨在记录这次学习经历,如有疑问或不当之处,可以在评论区指出,一起学习。 对scrapy不了解的同学可以阅读这篇文章 爬虫框架 Scrapy 详解,对scrapy框架介绍的

    2024年02月07日
    浏览(62)
  • 【爬虫】7.1. JavaScript动态渲染界面爬取-Selenium

    引言:在学习这一章之前,若之前对于Ajax数据的分析和爬取有过了解的会知道,Ajax是JavaScript动态渲染界面的一种情形,通过直接分析Ajax,使我们仍然可以借助requests或urllib实现数据爬取。不过JavaScript动态渲染的界面不止Ajax一种,而且在实际中Ajax接口中会含有很多加密参数

    2024年02月09日
    浏览(35)
  • 【爬虫】7.2. JavaScript动态渲染界面爬取-Selenium实战

    爬取的网页为:https://spa2.scrape.center,里面的内容都是通过Ajax渲染出来的,在分析xhr时候发现url里面有token参数,所有我们使用selenium自动化工具来爬取JavaScript渲染的界面。

    2024年02月10日
    浏览(30)
  • Python网络爬虫逆向分析爬取动态网页、使用Selenium库爬取动态网页、​编辑将数据存储入MongoDB数据库

    目录 逆向分析爬取动态网页 了解静态网页和动态网页区别 1.判断静态网页  2.判断动态网页  逆向分析爬取动态网页 使用Selenium库爬取动态网页 安装Selenium库以及下载浏览器补丁 页面等待  页面操作 1.填充表单 2.执行JavaScript 元素选取 Selenium库的find_element的语法使用格式如下

    2024年02月15日
    浏览(78)
  • 爬虫入门指南(4): 使用Selenium和API爬取动态网页的最佳方法

    随着互联网的发展,许多网站开始采用动态网页来呈现内容。与传统的静态网页不同,动态网页使用JavaScript等脚本技术来实现内容的动态加载和更新。这给网页爬取带来了一定的挑战,因为传统的爬虫工具往往只能获取静态网页的内容。本文将介绍如何使用Selenium和API来实现

    2024年02月11日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包