API例子:用Java/JavaScript下载内容提取器
本文讲解怎样用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,相关文档
6,集搜客GooSeeker开源代码下载源
1, GooSeeker开源Python网络爬虫GitHub源
7,文档修改历史
1,2016-06-28:V1.0
API例子:用Java/JavaScript下载内容提取器的更多相关文章
- Python即时网络爬虫项目: 内容提取器的定义(Python2.7版本)
		
1. 项目背景 在Python即时网络爬虫项目启动说明中我们讨论一个数字:程序员浪费在调测内容提取规则上的时间太多了(见上图),从而我们发起了这个项目,把程序员从繁琐的调测规则中解放出来,投入到更高端 ...
 - Python即时网络爬虫项目: 内容提取器的定义
		
1. 项目背景 在python 即时网络爬虫项目启动说明中我们讨论一个数字:程序员浪费在调测内容提取规则上的时间,从而我们发起了这个项目,把程序员从繁琐的调测规则中解放出来,投入到更高端的数据处理工作 ...
 - Selenium常用API的使用java语言之18-浏览器cookie操作
		
有时候我们需要验证浏览器中Cookie是否正确, 因为基于真实Cookie的测试是无法通过白盒测试和集成测试进行的.WebDriver提供了操作Cookie的相关方法可以读取. 添加和删除Cookie ...
 - API例子:用Python驱动Firefox采集网页数据
		
1,引言 本文讲解怎样用Python驱动Firefox浏览器写一个简易的网页数据采集器.开源Python即时网络爬虫项目将与Scrapy(基于twisted的异步网络框架)集成,所以本例将使用Scra ...
 - libj 0.8.2 发布,Java/JavaScript API 的 C++ 实现
		
libj 0.8.2 增加了一些新的字符串相关的方法. libj 是一个跨平台的运行库,相当于提供了类似 Java/JavaScript API.libj 的内存管理是自动的,基于 shared_pt ...
 - Java反射API研究(2)——java.lang.reflect详细内容与关系
		
对于最新的java1.8而言,reflect中接口的结构是这样的: java.lang.reflect.AnnotatedElement java.lang.reflect.AnnotatedType ...
 - 快速制作规则及获取规则提取器API
		
1. 引言 前面文章的测试案例都用到了集搜客Gooseeker提供的规则提取器,在网页抓取工作中,调试正则表达式或者XPath都是特别繁琐的,耗时耗力,工作枯燥,如果有一个工具可以快速生成规则,而且可 ...
 - 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 ...
 - java 8新内容整理
		
目录 一.Java 8 Lambda 表达式 1.1 语法 1.2 Lambda 表达式实例(常见) 二.Java 8 Stream 2.1 什么是 Stream? 2.2生成流 2.3 forE ...
 
随机推荐
- ExtJs 学习笔记
			
1.显示中文 <script type="text/javascript" src="../../locale/ext-lang-zh_CN.js"&g ...
 - select2使用详解
			
官网: https://select2.github.io/examples.html 引用: <link href="~/Scripts/select2/select2.css&qu ...
 - python基础教程第4章——字典
			
1.映射(mapping):通过名字引用值的数据结构.字典是Python中唯一内建的映射类型,字典中的值并没有特殊的顺序,但是都存储在一个特定的键(key)里.键可以是数字.字符串甚至是元组. 2.字 ...
 - Django  auth 登陆后页面跳转至/account/profile,修改跳转至其他页面
			
这几天在学习django,django功能很强大,自带的auth,基本可以满足用户注册登陆登出,简单的用户注册登陆系统使用django auth足矣.当然也不是拿来就能用的,需要自己写登陆页面的模板, ...
 - js中document的用法
			
document.title //设置文档标题等价于HTML的title标签document.bgColor //设置页面背景色document.fgColor //设置前景色(文本颜色)docume ...
 - Qt的十六进制的控件
			
Qt没有这样的Widget,自己写一个吧.我曾经用MFC写过一个,代码不多,不到2000行,估计用Qt写不到1000行就够了. 可以参考这个qhexedit2 - QHexEdit is a Bina ...
 - Redis应用场景-整理
			
1. MySql+Memcached架构的问题 Memcached采用客户端-服务器的架构,客户端和服务器端的通讯使用自定义的协议标准,只要满足协议格式要求,客户端Library可以用任何语言实现. ...
 - PHP MySQL Update 之 Update
			
更新数据库中的数据 UPDATE 语句用于在数据库表中修改数据. 语法 UPDATE table_name SET column_name = new_value WHERE column_name ...
 - 改变UITableViewCell按下去的颜色
			
UIView *bgColorView = [[UIView alloc] init]; [bgColorView setBackgroundColor:[UIColor redColor]]; [c ...
 - 了解XSS攻击
			
XSS又称CSS,全称Cross SiteScript,跨站脚本攻击,是Web程序中常见的漏洞,XSS属于被动式且用于客户端的攻击方式,所以容易被忽略其危害性.其原理是攻击者向有 XSS漏洞的网站中输 ...