抓取ajax动态网页java(2020-07-31181次浏览原文:幽沉窥唐虞)

优采云 发布时间: 2022-02-20 20:01

  抓取ajax动态网页java(2020-07-31181次浏览原文:幽沉窥唐虞)

  2020-07-31 原创 API 示例的 181 次查看:使用 Java/JavaScript 下载内容提取器

  关键词:

  默默的谢天谢地,低头窥视着唐羽。本文章主要介绍API示例:Java/JavaScript下载内容提取器相关知识,希望对您有所帮助。

  1 简介

  本文介绍了如何在 java 中下载内容提取器并使用 GooSeeker API 接口,这是一个示例程序。什么是内容提取器?为什么要用这种方式?来自 python 即时网络爬虫开源项目:通过生成内容提取器来节省程序员的时间。详情请参阅“内容提取器的定义”。

  2.用Java下载内容提取器

  这是一系列示例程序之一。从目前编程语言的发展来看,Java并不适合提取网页内容。再加上语言不够灵活方便,整个生态系统不够活跃,可选类库增长缓慢。此外,要从 JavaScript 动态网页中提取内容,Java 也很不方便,需要 JavaScript 引擎。使用 JavaScript 下载内容提取器以直接跳到第 3 部分的内容。

  执行

  注解:

  源代码如下:

      public static void main(String[] args)

    {

        InputStream xslt = null;

        try

        {

            String grabUrl = "http://m.58.com/cs/qiuzu/22613961050143x.shtml"; // 抓取网址

            String resultPath = "F:/temp/xslt/result.xml"; // 抓取结果文件的存放路径

            // 通过GooSeeker API接口获得xslt

            xslt = getGsExtractor();

            // 抓取网页内容转换结果文件

            convertXml(grabUrl, xslt, resultPath);

        } catch (Exception e)

        {

            e.printStackTrace();

        } finally

        {

            try

            {

                if (xslt != null)

                    xslt.close();

            } catch (IOException e)

            {

                e.printStackTrace();

            }

        }

    }

    /**

     * @description dom转换

     */

    public static void convertXml(String grabUrl, InputStream xslt, String resultPath) throws Exception

    {

        // 这里的doc对象指的是jsoup里的Document对象

        org.jsoup.nodes.Document doc = Jsoup.parse(new URL(grabUrl).openStream(), "UTF-8", grabUrl);

        W3CDom w3cDom = new W3CDom();

        // 这里的w3cDoc对象指的是w3c里的Document对象

        org.w3c.dom.Document w3cDoc = w3cDom.fromJsoup(doc);

        Source srcSource = new DOMSource(w3cDoc);

        TransformerFactory tFactory = TransformerFactory.newInstance();

        Transformer transformer = tFactory.newTransformer(new StreamSource(xslt));

        transformer.transform(srcSource, new StreamResult(new FileOutputStream(resultPath)));

    }

    /**

     * @description 获取API返回结果

     */

    public static InputStream getGsExtractor()

    {

        // api接口

        String apiUrl = "http://www.gooseeker.com/api/getextractor";

        // 请求参数

        Map params = new HashMap();

        params.put("key", "xxx");  // Gooseeker会员中心申请的API KEY

        params.put("theme", "xxx");  // 提取器名,就是用MS谋数台定义的规则名

        params.put("middle", "xxx");  // 规则编号,如果相同规则名下定义了多个规则,需填写

        params.put("bname", "xxx"); // 整理箱名,如果规则含有多个整理箱,需填写

        String httpArg = urlparam(params);

        apiUrl = apiUrl + "?" + httpArg;

        InputStream is = null;

        try

        {

            URL url = new URL(apiUrl);

            HttpURLConnection urlCon = (HttpURLConnection) url.openConnection();

            urlCon.setRequestMethod("GET");

            is = urlCon.getInputStream();

        } catch (ProtocolException e)

        {

            e.printStackTrace();

        } catch (IOException e)

        {

            e.printStackTrace();

        }

        return is;

    }

    /**

     * @description 请求参数

     */

    public static String urlparam(Map data)

    {

        StringBuilder sb = new StringBuilder();

        for (Map.Entry entry : data.entrySet())

        {

            try

            {

                sb.append(entry.getKey()).append("=").append(URLEncoder.encode(entry.getValue() + "", "UTF-8")).append("&");

            } catch (UnsupportedEncodingException e)

            {

                e.printStackTrace();

            }

        }

        return sb.toString();

    }

    

[object Object]

  3. 使用 JavaScript 下载内容提取器

  请注意,如果本示例中的 JavaScript 代码运行在网页上,由于跨域问题,无法抓取非本地网页的内容。因此,需要在特权JavaScript引擎上运行,例如浏览器扩展、自研浏览器、自身程序中的JavaScript引擎等。

  为了实验的方便,这个例子还在网页上运行。为了绕过跨域问题,保存并修改目标网页,并在其中插入JavaScript。这么多手动操作只是为了实验,正式使用时还需要考虑其他手段。

  执行

  注解:

  这是源代码:

  // 目标网页网址为http://m.58.com/cs/qiuzu/22613961050143x.shtml,预先保存成本地html文件,并插入下述代码

$(document).ready(function(){

    $.ajax({

        type: "get", 

        url: "http://www.gooseeker.com/api/getextractor?key=申请的a*敏*感*词*ey&theme=规则主题名", 

        dataType: "xml", 

        success: function(xslt)

            {

            var result = convertXml(xslt, window.document);

            alert("result:" + result);

        } 

    });  

});

/* 用xslt将dom转换为xml对象 */

function convertXml(xslt, dom)

{

    // 定义XSLTProcessor对象

    var xsltProcessor = new XSLTProcessor();

    xsltProcessor.importStylesheet(xslt);

    // transformToDocument方式

    var result = xsltProcessor.transformToDocument(dom);

    return result;

}

  返回结果截图如下

  

  4、展望

  您还可以使用 Python 来获取指定网页的内容。我觉得Python的语法更简洁。以后我会添加 Python 语言的例子。有兴趣的朋友可以加入研究。

  五、相关文件

  一、Python即时网络爬虫:API说明

  6.Jisouke GooSeeker开源代码下载源

  1、GooSeeker开源Python网络爬虫GitHub源码

  7.文档修改历史

  1、2016-06-27:V1.0

  本文来自“富勒华的博客”博客,请勿转载!

  至此,这篇关于 API 示例的文章:使用 Java/JavaScript 下载内容提取器已经完成了内容。如果没有解决你的问题,请参考下面的文章:

  相关文章

  366API!完美解决微信h5页面点击文件下载链接无响应的问题

  微信被禁网页如何处理?366API将被屏蔽的网页从微信恢复正常访问的解决方案

  图像识别快速入门:使用 TensorFlow API 进行图像分类的示例

  VBA绘制Excel图表

  cesium1.65api版贴纸模型绘图工具效果(附源码下载)

  吐槽贴:百度地图api包实用功能【源码下载】

  cesium1.63.1api版贴纸模型测量工具效果(附源码下载)

  使用百度地图API分析交通大数据

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线