1,引言

本文讲解怎样用Java和JavaScript使用 GooSeeker API 接口下载内容提取器,这是一个示例程序。什么是内容提取器?为什么用这种方式?源自Python即时网络爬虫开源项目:通过生成内容提取器,大幅节省程序员时间。具体请参看《内容提取器的定义》。

2, 用Java下载内容提取器

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

具体实现

注解:

  • 使用Java类库 jsoup(1.8.3以上版本),可以很便利、快速的获取网页dom。
  • 通过GooSeeker API 获取xslt(参考 1分钟快速生成用于网页内容提取的xslt
  • 使用Java自带的类TransformerFactory执行网页内容转换

源代码如下:

返回结果如下:

3, 用JavaScript下载内容提取器

请注意,如果本例的JavaScript代码是在网页上运行的,因为跨域问题,是无法实现非本站网页内容爬取的。所以,要运行在具有特权的JavaScript引擎上,比如,浏览器扩展程序、自研的浏览器、自己的程序中含有JavaScript引擎等。

本例为了实验方便,仍然放在网页上运行,为了绕开跨域问题,是把目标网页存下来并进行修改,把JavaScript插入进去。这么多人工操作,仅仅是为了实验,正式使用的时候需要考虑别的手段。

具体实现

注解:

  • 引用 jQuery 类库 (jQuery-1.9.0 以上)
  • 为了解决跨域问题,把目标网页预先保存到硬盘上
  • 在目标网页中插入JavaScript代码
  • 使用GooSeeker API,把内容提取器下载下来,内容提取器是一个xslt程序,下例使用了jQuery的ajax方法从api获得xslt
  • 用xslt处理器作内容提取

下面是源代码:

返回的结果截图如下

4,展望

同样可以用Python来获取指定网页内容,感觉Python的语法更加简洁,后续增加Python语言的示例,有兴趣的小伙伴可以加入一起研究。

5,相关文档

1, Python即时网络爬虫:API说明

6,集搜客GooSeeker开源代码下载源

1, GooSeeker开源Python网络爬虫GitHub源

7,文档修改历史

1,2016-06-28:V1.0

API例子:用Java/JavaScript下载内容提取器的更多相关文章

  1. Python即时网络爬虫项目: 内容提取器的定义(Python2.7版本)

    1. 项目背景 在Python即时网络爬虫项目启动说明中我们讨论一个数字:程序员浪费在调测内容提取规则上的时间太多了(见上图),从而我们发起了这个项目,把程序员从繁琐的调测规则中解放出来,投入到更高端 ...

  2. Python即时网络爬虫项目: 内容提取器的定义

    1. 项目背景 在python 即时网络爬虫项目启动说明中我们讨论一个数字:程序员浪费在调测内容提取规则上的时间,从而我们发起了这个项目,把程序员从繁琐的调测规则中解放出来,投入到更高端的数据处理工作 ...

  3. Selenium常用API的使用java语言之18-浏览器cookie操作

    有时候我们需要验证浏览器中Cookie是否正确, 因为基于真实Cookie的测试是无法通过白盒测试和集成测试进行的.WebDriver提供了操作Cookie的相关方法可以读取. 添加和删除Cookie ...

  4. API例子:用Python驱动Firefox采集网页数据

    1,引言 本文讲解怎样用Python驱动Firefox浏览器写一个简易的网页数据采集器.开源Python即时网络爬虫项目将与Scrapy(基于twisted的异步网络框架)集成,所以本例将使用Scra ...

  5. libj 0.8.2 发布,Java/JavaScript API 的 C++ 实现

    libj 0.8.2 增加了一些新的字符串相关的方法. libj 是一个跨平台的运行库,相当于提供了类似 Java/JavaScript API.libj 的内存管理是自动的,基于 shared_pt ...

  6. Java反射API研究(2)——java.lang.reflect详细内容与关系

    对于最新的java1.8而言,reflect中接口的结构是这样的: java.lang.reflect.AnnotatedElement java.lang.reflect.AnnotatedType ...

  7. 快速制作规则及获取规则提取器API

    1. 引言 前面文章的测试案例都用到了集搜客Gooseeker提供的规则提取器,在网页抓取工作中,调试正则表达式或者XPath都是特别繁琐的,耗时耗力,工作枯燥,如果有一个工具可以快速生成规则,而且可 ...

  8. Flink Program Guide (1) -- 基本API概念(Basic API Concepts -- For Java)

    false false false false EN-US ZH-CN X-NONE /* Style Definitions */ table.MsoNormalTable {mso-style-n ...

  9. java 8新内容整理

    目录 一.Java 8 Lambda 表达式 1.1 语法 1.2  Lambda 表达式实例(常见) 二.Java 8 Stream 2.1 什么是 Stream? 2.2生成流 2.3  forE ...

随机推荐

  1. PHP中__autoload()的不解之处,求高手指点

    一整段代码: 运行结果: 使用__autoload(),分为两页代码: 第一段代码: ACMEManager.php,代码如下: 运行结果:

  2. 闲聊之Python的数据类型 - 零基础入门学习Python005

    闲聊之Python的数据类型 让编程改变世界 Change the world by program Python的数据类型 闲聊之Python的数据类型所谓闲聊,goosip,就是屁大点事可以咱聊上 ...

  3. 黑马程序员 1、C语言32个关键字整理分类

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------ C语言一共有32个关键字 一.数据类型关键字(共20个) A.基本数据类型(5个)void :声明 ...

  4. winform 窗口点击窗体任意位置移动窗体

    private bool _isDown; private Point _mousePoint; private void Users_MouseDown(object sender, MouseEv ...

  5. 对发给Application.Handle消息的三次执行(拦截)消息的过程

    unit Main; interface uses SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls, Forms ...

  6. C# dynamic类型

    dynamic类型是C#4.0中引入的新类型,它允许其操作掠过编译器类型检查,而在运行时处理.dynami类型在绝大多数情况下和object类型相似,不同之处在于编译器对于包含了dynamic的表达式 ...

  7. Go代理,修改标题

  8. android fragment 跳到另一个fragment

    一共有4个fragment,分别是contact(联系人),friends(朋友),search(查找),more(更多).使用的都是同一个布局,每个fragment中都有四个内部按钮,可以切换到其他 ...

  9. 关于oracle动态视图v$datafile和v$datafile_header(转)

    v$datafile是从oracle的控制文件中获得的数据文件的信息v$datafile_header是从数据文件的头部在正常运行下,两者的检查点SCN值是一致的,但当datafile出现损坏时可以用 ...

  10. (?:pattern) (?=pattern) (?!pattern)

    (pattern) 匹配 pattern 并获取这一匹配.所获取的匹配可以从产生的 Matches 集合得到,在VBScript 中使用 SubMatches 集合,在JScript 中则使用 $0- ...