美文网首页爬虫专题程序员技术干货
Java爬虫入门篇(三)使用 cdp4j 抓取需要渲染的网页

Java爬虫入门篇(三)使用 cdp4j 抓取需要渲染的网页

作者: 殷天文 | 来源:发表于2018-02-20 19:38 被阅读641次
  • 场景描述:一些网站的 response 中拿不到我们想要的数据,这些数据是在浏览器渲染后才显示在页面上的
  • 解决方案:上一篇中我介绍了使用 Java 8 Nashorn 动态执行js脚本,这篇中使用 cdp4j 直接在Java端调用 chrome 浏览器,返回浏览器渲染后的html,简单粗暴,完美解决。

cdp4j - Chrome DevTools Protocol for Java (官方文档)

<dependency>
    <groupId>io.webfolder</groupId>
    <artifactId>cdp4j</artifactId>
    <version>2.2.1</version>
</dependency>
import java.util.ArrayList;

import io.webfolder.cdp.Launcher;
import io.webfolder.cdp.session.Session;
import io.webfolder.cdp.session.SessionFactory;

public class Test {
    
    public static void main(String args[]) {
        ArrayList<String> command = new ArrayList<String>();
        //不显示google 浏览器
        command.add("--headless");
        Launcher launcher = new Launcher();
        try (SessionFactory factory = launcher.launch(command);
                Session session = factory.create()) {
            session.navigate("https://webfolder.io");
            session.waitDocumentReady();
            String content = (String) session.getContent();
            System.out.println(content);
            //已经拿到渲染后的html,下面就可以用jsoup去抓取想要的数据了
        }
    }
    
}

注意:由于cdp4j需要chrome的支持,所以更适合在windows环境下运行

总结:执行效率上没有测过,不敢说那种方法效率更高,但是使用cdp4j确实简单粗暴,更方便

转载请注明出处,原文作者:殷天文

系列教程
Java爬虫入门篇(一)HttpClient+jsoup,以及防盗链简述
Java爬虫入门篇(二)Java 8 Nashorn 动态执行js脚本

相关文章

网友评论

  • ut_ut:楼主是用什么ide开发的,我用的myeclipse 10,无法导入 io.webfolder.cdp.Downloader.Launcher类,求教
    ps:环境为 jdk 1.8
    ut_ut:@殷天文 我用myeclipse10,jdk1.8,没用maven,直接加的 cdp4j jar包,初步判断myeclipse10可能不支持1.8,目前正在装myeclipse2017,装完再试试...:sweat:
    殷天文:@ut_ut 我是sts, jdk 1.8,maven 依赖确定 down下来了?

本文标题:Java爬虫入门篇(三)使用 cdp4j 抓取需要渲染的网页

本文链接:https://www.haomeiwen.com/subject/cxigtftx.html