爬虫获取渲染后页面(JAVA)

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

一、背景 

最近突然想了解一下爬虫,但是自己又不太了解python,所以学习了下Java版爬虫。在这个过程中遇到了一个问题,为了解决这个问题,百度了很多方法,两个小时候,终于找到了一个最佳方案

二、问题描述

第一个问题:想要抓取的网页是http or https请求,这个很关键,有些方法无法实现https请求。

第二个问题:关键接口相应内容为密文(除非可以解密,否则只能通过抓取网页,获取解析内容)

第三个问题:网页源码 与 下载后的文件不一致,下载后的文件为浏览器渲染后的网页

三、解决方法

3.1、http请求

若为https,则使用httpClient是无法访问通过的。该方法可以解决http请求获取页面问题

public static Page  sendRequstAndGetResponse(String url) {
        Page page = null;
        // 1.生成 HttpClinet 对象并设置参数
        HttpClient httpClient = new HttpClient();
        // 设置 HTTP 连接超时 5s
        httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(5000);
        // 2.生成 GetMethod 对象并设置参数
        GetMethod getMethod = new GetMethod(url);
        // 设置 get 请求超时 5s
        getMethod.getParams().setParameter(HttpMethodParams.SO_TIMEOUT, 5000);
        // 设置请求重试处理
        getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler());
        // 3.执行 HTTP GET 请求
        try {
            int statusCode = httpClient.executeMethod(getMethod);
        // 判断访问的状态码
            if (statusCode != HttpStatus.SC_OK) {
                System.err.println("Method failed: " + getMethod.getStatusLine());
            }
        // 4.处理 HTTP 响应内容
            byte[] responseBody = getMethod.getResponseBody();// 读取为字节 数组
            String contentType = getMethod.getResponseHeader("Content-Type").getValue(); // 得到当前返回类型
            page = new Page(responseBody,url,contentType); //封装成为页面
        } catch (HttpException e) {
        // 发生致命的异常,可能是协议不对或者返回的内容有问题
            System.out.println("Please check your provided http address!");
            e.printStackTrace();
        } catch (IOException e) {
        // 发生网络异常
            e.printStackTrace();
        } finally {
        // 释放连接
            getMethod.releaseConnection();
        }
        return page;
    }

3.2、网页源码 与 下载后的文件不一致,下载后的文件为浏览器渲染后的网页

方法一:虽然启用了JS、CSS,并添加了延时,但获取的页面依旧不是渲染后的网页。

对于有些复杂网页并不能够实现,有些网页在获取接口参数(甚至加密),

    public void test1() {
        // 新建一个模拟谷歌Chrome浏览器的浏览器客户端对象
        final WebClient webClient = new WebClient(BrowserVersion.CHROME);
        // 当JS执行出错的时候是否抛出异常, 这里选择不需要
        webClient.getOptions().setThrowExceptionOnScriptError(false);
        // 当HTTP的状态非200时是否抛出异常, 这里选择不需要
        webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);
        webClient.getOptions().setActiveXNative(false);
        // 是否启用CSS, 因为不需要展现页面, 所以不需要启用
        webClient.getOptions().setCssEnabled(true);
        // 启用JS
        webClient.getOptions().setJavaScriptEnabled(true);
        // 很重要,设置支持AJAX
        webClient.setAjaxController(
                new NicelyResynchronizingAjaxController());


        HtmlPage page;
        try {
            page = webClient.getPage("https://xxx");
            Thread.sleep(10000);//程的等待 因为js加载需要时间的
            System.out.println(page.asXml());
            String s = page.asXml();
        } catch (Exception ignored) {
        }finally {
            webClient.close();
        }
    }

方法二:直接抓取渲染后网页进行解析(耗性能,但有用)

<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-java</artifactId>
    <version>2.33.0</version>
</dependency>
public void test3() throws InterruptedException {
        //驱动所在的地址
        System.getProperties().setProperty("webdriver.chrome.driver", "C:\\Users\\leo\\Desktop\\chromedriver.exe");
        ChromeOptions option = new ChromeOptions();

        //chrome.exe所在的地址
        option.setBinary("C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe");

        ChromeDriver webDriver = new ChromeDriver(option);
        String str = "https://aaa#";
        //请求根地址
        webDriver.get(url);
        System.out.println(url);
        Thread.sleep(3000);

        //页面信息
        WebElement htmlElement = webDriver.findElement(By.xpath("/html"));
        String text = htmlElement.getText();
    }

四、总结

        内容简单但是有效,使用爬虫技术时候,请一定要合法哦!文章来源地址https://www.toymoban.com/news/detail-601251.html

到了这里,关于爬虫获取渲染后页面(JAVA)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Java 开发工具—IDEA

    IDEA 全称 IntelliJ IDEA ,是用于 Java 语言开发的集成环境,它是业界公认的目前用于 Java 程序开发最好的工具。 集成环境 :把代码编写,编译,执行,调试等多种功能综合到一起的开发工具。 2.1 IDEA下载 下载:(官网下载)  https://www.jetbrains.com/idea/ 安装:傻瓜式安装,建议修改

    2024年02月07日
    浏览(155)
  • JAVA开发常用测试工具

    什么是junit JUnit 是一个用于编写和运行单元测试的开源框架,是Java 开发中最常用的单元测试框架之一。它为 Java 开发者提供了一种简单、灵活且可扩展的方式来编写自动化测试代码,并帮助开发者进行单元测试的管理和执行。 JUnit 提供了一组注解和断言方法,使开发者能够

    2024年04月25日
    浏览(53)
  • Java开发者在Windows环境安装各类开发工具汇总

    不管是刚开始学习编程的菜鸟还是老鸟,总会遇到如系统崩溃、更换系统、更换硬盘、更换电脑等问题,然后再重新安装开发工具场景下费时费力(部分记不住,然后网络搜索),故整理汇总在Windows环境安装各类常用开发工具。 Linux环境参考:Java开发者在Linux环境安装各类开发

    2024年02月02日
    浏览(60)
  • java开发常用的工具以及配置类

    今天接着上一篇博文,聊 java开发常用的工具以及配置类。 13 日期操作相关的java类。 比如在开发预约旅游 预约体检 预约售票等相关和日期相关的业务,需要获取日期以及判断是一周的哪一天等。 14 处理请求路径的URL工具类 比如,有时需要根据传入的路径url获取请求参数或

    2024年02月08日
    浏览(50)
  • 【Android】在AndroidStudio开发工具运行Java程序

    在Android Studio开发工具中,Android系统开始就是用java语言开发的,还可以java代码来写程序,控制台,桌面应用,还可以写可调用的模块,这里讲一下创建Java程序步骤,方便入门java语言开发。 新建一个Android项目时,要选择第一个,就是空的(不带模板)的项目,这里打开会有

    2024年02月11日
    浏览(55)
  • Java开发小白入门前的工具安装

    学习过程是痛苦的, 我们要学会苦中作乐! 关于java语言的基本介绍百度上都有,拉出来的都很详细,不做过多的介绍,我想写的主要是以干活为主,大家一起学习java 的知识。 编程的学习主要还是要靠自己勤劳的双手------敲代码,一遍又一遍的把代码敲出来,直到它成为你

    2024年04月16日
    浏览(52)
  • 热门Java开发工具IDEA入门指南——插件安装方式

    IntelliJ IDEA,是java编程语言开发的集成环境。IntelliJ在业界被公认为最好的java开发工具,尤其在智能代码助手、代码自动提示、重构、JavaEE支持、各类版本工具(git、svn等)、JUnit、CVS整合、代码分析、 创新的GUI设计等方面的功能是非常强大的。 本文给大家讲解在使用IntelliJ I

    2024年02月09日
    浏览(57)
  • Java开发工具 IDEA(社区免费版)安装部署教程

    国内高速下载: 链接: https://pan.baidu.com/s/1Ioq_BLdyBxSuv4HtUURAQw?pwd=e1vc 提取码: e1vc 复制这段内容后打开百度网盘手机App,操作更方便哦  --来自百度网盘超级会员v1的分享 IDEA官网地址:https://www.jetbrains.com/idea/download/#section=windows 下载社区版后,点击安装,就进行傻瓜式的安装了。

    2024年04月12日
    浏览(74)
  • Java程序员必备工具大全,助力开发效率提升!

    🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 🌊 《IDEA开发秘籍专栏》学会IDEA常用操作,工作效率翻倍~💐 🌊 《100天精通Golang(基础入门篇)》学会Golang语言

    2024年02月13日
    浏览(60)
  • Java之IDE开发工具eclipse下载安装使用详细教程

    熟练eclipse的使用 Eclipse是一个IDE(集成开发环境),集成了代码编写功能,分析功能,编译功能,调试功能等一体化的开发软件。 免费 Java语言编写 免安装 扩展性强 下载和安装 下载地址:http://eclipse.org 绿色版 解压就可以使用(Eclipse) 版本代号 平台版本 需要的JDK最低版本 Gal

    2024年04月14日
    浏览(97)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包