java使用htmlunit工具抓取js中加载的数据

htmlunit 是一款开源的java 页面分析工具,读取页面后,可以有效的使用htmlunit分析页面上的内容。项目可以模拟浏览器运行,被誉为java浏览器的开源实现。这个没有界面的浏览器,运行速度也是非常迅速的。采用的是Rhinojs引擎。模拟js运行。

说白了就是一个浏览器,这个浏览器是用Java写的无界面的浏览器,正因为其没有界面,因此执行的速度还是可以滴,HtmlUnit提供了一系列的API,这些API可以干的功能比较多,如表单的填充,表单的提交,模仿点击链接,由于内置了Rhinojs引擎,因此可以执行Javascript。
网页获取和解析速度较快,性能较好,推荐用于需要解析网页脚本的应用场景。

在使用此工具前需要导入htmlunit需要的jar包:

代码:

public static String url="http://www.XXX.cn/XXX";//抓取数据的地址
    public static void main(String[] args) throws IOException, SAXException
    {
        WebClient wc = new WebClient(BrowserVersion.FIREFOX_52);
        wc.getOptions().setJavaScriptEnabled(true); //启用JS解释器,默认为true
        wc.setJavaScriptTimeout(100000);//设置JS执行的超时时间
        wc.getOptions().setCssEnabled(false); //禁用css支持
        wc.getOptions().setThrowExceptionOnScriptError(false); //js运行错误时,是否抛出异常
        wc.getOptions().setTimeout(10000); //设置连接超时时间 ,这里是10S。如果为0,则无限期等待
        wc.setAjaxController(new NicelyResynchronizingAjaxController());//设置支持AJAX
        wc.setWebConnection(new WebConnectionWrapper(wc) {
                    public WebResponse getResponse(WebRequest request) throws IOException {
                        WebResponse response = super.getResponse(request);
                        String data=  response.getContentAsString();
                        if (data.contains("{\"js中的数据标识\"")){//判断抓到的js数据是否是包含抓取的字段
                            System.out.println(data);
                            writeFile(data);//将js中获取的数据写入指定路径的txt文件中
                        }
                        return response;
                    }
                }
        );
        HtmlPage page = wc.getPage(url);
        System.out.println("page:" + page);
        try {
            Thread.sleep(1000);//设置
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        //关闭webclient
        wc.close();
    }

    /**
     * 写入TXT文件
     */
    public static void writeFile(String data) {
        try {
            File writeName = new File("data.txt"); // 相对路径,如果没有则要建立一个新的output.txt文件
            writeName.createNewFile(); // 创建新文件,有同名的文件的话直接覆盖
            try{          FileWriter writer = new FileWriter(writeName);           BufferedWriter out = new BufferedWriter(writer);
                out.write(data);
                out.flush(); // 把缓存区内容压入文件
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

原文地址:https://www.cnblogs.com/qiantao/p/11401608.html

时间: 2024-11-03 03:24:37

java使用htmlunit工具抓取js中加载的数据的相关文章

使用轻量级JAVA 爬虫Gecco工具抓取新闻DEMO

写在前面 最近看到Gecoo爬虫工具,感觉比较简单好用,所有写个DEMO测试一下,抓取网站 http://zj.zjol.com.cn/home.html,主要抓取新闻的标题和发布时间做为抓取测试对象.抓取HTML节点通过像Jquery选择器一样选择节点,非常方便,Gecco代码主要利用注解实现来实现URL匹配,看起来比较简洁美观. Gecoo GitHub地址 https://github.com/xtuhcy/gecco Gecoo 作者博客 http://my.oschina.net/u/

点滴积累【C#】---抓取页面中想要的数据

效果: 描述:此功能是抓取外国的一个检测PM2.5的网站.实时读取网站的数据,然后保存到数据库里面.每隔一小时刷新一次. 地址为:http://beijing.usembassy-china.org.cn/070109air.html 筛选后的地址为:http://utils.usembassy.gov/feed2js/feed2js.php?src=http%3A%2F%2Fwww.stateair.net%2Fweb%2Frss%2F1%2F1.xml&desc=1&num=7&

JS中加载cssText延时

<!Doctype html> <html> <head> <meta charset="utf-8" /> <title></title> <style> * { padding: 0; margin: 0; } html { height: 100%; } body { height: 100%; background: url(img/pic10.jpg) no-repeat; backgroun

Java豆瓣电影爬虫——抓取电影详情和电影短评数据

一直想做个这样的爬虫:定制自己的种子,爬取想要的数据,做点力所能及的小分析.正好,这段时间宝宝出生,一边陪宝宝和宝妈,一边把自己做的这个豆瓣电影爬虫的数据采集部分跑起来.现在做一个概要的介绍和演示. 动机 采集豆瓣电影数据包括电影详情页数据和电影的短评数据. 电影详情页如下图所示 需要保存这些详情字段如导演.编剧.演员等还有图中右下方的标签. 短评页面如下图所示 需要保存的字段有短评所属的电影名称,每条评论的详细信息如评论人名称.评论内容等. 数据库设计 有了如上的需求,需要设计表,其实很简单,

Java实现简单地抓取开源中国主页的相关数据

代码示例 package demo0806; import java.io.BufferedReader; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URL; import java.net.URLConnection;

Fiddler中如何抓取app中https(443端口)数据

Fiddler不但能截获各种浏览器发出的HTTP请求, 也可以截获手机发出的HTTP/HTTPS请求,总结下Fiddler截获IPhone和Android发出的HTTP/HTTPS包,前提条件是:安装Fiddler的机器,跟Iphone.Android在同一个网络里, 否则手机不能把HTTP发送到Fiddler的机器上来. 如果你遇到了这个坑:手机上已经设置好代理,开启代理后,却发现手机上不了网. 那么应该是和电脑防火墙有关,此时需要设置下防火墙,如过设置无效或者不知道怎么设置的话直接将防火墙暂

Python爬虫学习——使用selenium和phantomjs爬取js动态加载的网页

1.安装selenium pip install selenium Collecting selenium Downloading selenium-3.4.1-py2.py3-none-any.whl (931kB) 100% |████████████████████████████████| 942kB 573kB/s Installing collected packages: selenium Successfully installed selenium-3.4.1 2.安装phan

C#在窗口中ComboBox控件中加载数据库数据

首先,窗体一加载,绑定省份和城市数据 //窗口加载事件 private void register_Load(object sender, EventArgs e) { bindPro();//绑定省份数据函数 } /// <summary> /// 绑定省份数据函数 /// </summary> public void bindPro() { //获取数据库数据 List<ProvinceData> list = new ProvinceDA().Select();

js自动分页加载所有数据

原理:通过循环执行scrollTo直至滚动到页面顶部,循环只能通过setInterval的方式,不能使用for循环. var cur,last = 0,i = 1; cur = document.getElementsByClassName('footer_auto')[0].offsetTop;var timer = setInterval(function(){ var cur = document.getElementsByClassName('footer_auto')[0].offse