2021SC@SDUSC

简单说明一下Gecco中的htmlunit。

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

下载

 <dependency><groupId>com.geccocrawler</groupId><artifactId>gecco-htmlunit</artifactId><version>x.x.x</version></dependency>

JD的商品详情信息里的价格的信息是通过ajax异步请求而来的,之前是利用@Ajax注解的方式实现的。这里用htmlunit来自动完成ajax请求。

@Gecco(matchUrl="http://item.jd.com/{code}.html", pipelines="consolePipeline", downloader="htmlUnitDownloder")
public class JDDetail implements HtmlBean {private static final long serialVersionUID = -377053120283382723L;@RequestParameterprivate String code;@Text@HtmlField(cssPath=".p-price")private String price;@Text@HtmlField(cssPath="#name > h1")private String title;@Text@HtmlField(cssPath="#p-ad")private String jdAd;@HtmlField(cssPath="#product-detail-2")private String detail;public String getPrice() {return price;}public void setPrice(String price) {this.price = price;}public String getJdAd() {return jdAd;}public void setJdAd(String jdAd) {this.jdAd = jdAd;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public String getDetail() {return detail;}public void setDetail(String detail) {this.detail = detail;}public String getCode() {return code;}public void setCode(String code) {this.code = code;}public static void main(String[] args) throws Exception {HttpRequest request = new HttpGetRequest("http://item.jd.com/1455427.html");request.setCharset("GBK");GeccoEngine.create().classpath("com.geccocrawler.gecco.htmlunit")//开始抓取的页面地址.start(request)//开启几个爬虫线程.thread(1).timeout(1000).run();}
}

优缺点 使用htmlunit确实能省去很多工作,但是htmlunit也存在很多弊端:

1、效率低下,使用htmlunit后,下载器要将所有js一并下载下来,同时要执行所有js代码,下载一个页面有时需要5~10秒。

2、rhino引擎对js的兼容问题,rhino的兼容性还是存在不少问题的。如果大家在抓取时不想看到这些error日志输出可以配置log4j:

log4j.logger.com.gargoylesoftware.htmlunit=OFF

Gecco学习笔记(九)相关推荐

  1. IOS学习笔记(九)之UIAlertView(警告视图)和UIActionSheet(操作表视图)基本概念和使用方法...

    IOS学习笔记(九)之UIAlertView(警告视图)和UIActionSheet(操作表视图)基本概念和使用方法 Author:hmjiangqq Email:jiangqqlmj@163.com ...

  2. python3.4学习笔记(九) Python GUI桌面应用开发工具选择

    python3.4学习笔记(九) Python GUI桌面应用开发工具选择 Python GUI开发工具选择 - WEB开发者 http://www.admin10000.com/document/9 ...

  3. 吴恩达《机器学习》学习笔记九——神经网络相关(1)

    吴恩达<机器学习>学习笔记九--神经网络相关(1) 一. 非线性假设的问题 二. 神经网络相关知识 1.神经网络的大致历史 2.神经网络的表示 3.前向传播:向量化表示 三. 例子与直觉理 ...

  4. ROS学习笔记九:用C++编写ROS发布与订阅

    ROS学习笔记九:用C++编写ROS发布与订阅 本节主要介绍如何用C++编写一个简单的ROS发布与订阅. 编写发布节点 在之前创建的例子beginner_tutorials软件包中,在其目录下的src ...

  5. at24c16如何划分出多个读写区_AVR学习笔记九、基于AT24C16的数据存储实验

    Ema{@AVR 学习笔记九.基于 AT24C16 的数据存储实验 ------- 基于 LT_Mini_M16 9.1 用 I/O 口模拟 I2C 总线实现 AT24C16 的读写 9.1.1 .实 ...

  6. JavaScript学习笔记(九)(验证框架,layer弹出层)

    JavaScript学习笔记(九) 一.jQuery Validate验证框架 1.引入相关插件路径 2. 修改一些规则 3. 自定义验证规则 4.异步验证 整体代码 二.layer弹出层 1.引入相 ...

  7. OpenCV学习笔记(九)——图像轮廓(下)

    <OpenCV轻松入门:面向Python>学习笔记(九) 1-3 查找并绘制轮廓.矩特性及Hu矩 4-5 轮廓拟合及凸包 6. 利用形状场景算法比较轮廓 6.1 计算形状场景距离 6.2 ...

  8. Polyworks脚本开发学习笔记(九)-公差控制及制作报告

    Polyworks脚本开发学习笔记(九)-公差控制及制作报告 定义公差 系统有默认的公差设置,可以在选项中进行系统的默认设置,但往往不是想要的.比如下图的XYZ三向都是-/+1,我想只控制Y向并且公差 ...

  9. 步步为营 .NET 代码重构学习笔记 九

    步步为营 .NET 代码重构学习笔记系列 步步为营 .NET 代码重构学习笔记 一.为何要代码重构 步步为营 .NET 代码重构学习笔记 二.提炼方法(Extract Method) 步步为营 .NE ...

  10. [傅里叶变换及其应用学习笔记] 九. 继续卷积的讨论

    这份是本人的学习笔记,课程为网易公开课上的斯坦福大学公开课:傅里叶变换及其应用. 卷积在滤波中的应用 浑浊度(Turbidity)研究是关于测量水的清澈度的研究.大致方法是把光传感器放置到深水区域,然 ...

最新文章

  1. unmappable character for encoding UTF8
  2. 单页面抓图并且保存的爬虫
  3. 「BZOJ 2152」聪聪可可
  4. 你还在用 Swagger?试试这个神器!
  5. shell配置,选择,环境变量修改(ORACLE_HOME,ORACLE_SID),无法使用sqlplus
  6. Eclipse中添加对Python的中文支持
  7. 有关机械手臂控制中的两个重要输入参数
  8. 前端学习(3048):vue+element今日头条管理-展示文章列表
  9. 惠普服务器查询ilo信息,Hp服务器iLO IML硬件日志收集与远程巡检
  10. android 自定义tabhost,安卓选项卡的实现方法(TabActivity),自定义TabHost容器
  11. windows的又一个问题
  12. 微信小程序-制作购物车
  13. ORB-SLAM总结
  14. 自己设计过App的数据库框架?还是只是停留在使用ormlite greenDao这类框架,一篇文章帮你解答...
  15. 创建枚举类 java_Java枚举类
  16. 《SPSS统计分析与行业应用实战》之房地产业中的应用
  17. 庆贺!浙江省建工集团智能线首根H型钢下线成功
  18. 【C语言程序设计·考试复习】视频讲解课程合集
  19. 操作系统总结(二)系统调用及系统结构
  20. python函数应用

热门文章

  1. 销量大增,理想汽车离春天依然很远?
  2. 山东大学2019计算机考研分数线,2019考研山东大学复试分数线已公布
  3. IIS设置HTTP 响应标头控制文件下载
  4. UG NX 12 拔模
  5. Python数字类型的运算
  6. 基于C语言实现的网络嗅探器设计课程设计
  7. 分布式领域重要原理_李孟_新浪博客
  8. 北斗导航软件怎么下载?
  9. MySQL索引作用和用法详解
  10. Mapbox icon-image表达式