Gecco学习笔记(九)
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学习笔记(九)相关推荐
- IOS学习笔记(九)之UIAlertView(警告视图)和UIActionSheet(操作表视图)基本概念和使用方法...
IOS学习笔记(九)之UIAlertView(警告视图)和UIActionSheet(操作表视图)基本概念和使用方法 Author:hmjiangqq Email:jiangqqlmj@163.com ...
- python3.4学习笔记(九) Python GUI桌面应用开发工具选择
python3.4学习笔记(九) Python GUI桌面应用开发工具选择 Python GUI开发工具选择 - WEB开发者 http://www.admin10000.com/document/9 ...
- 吴恩达《机器学习》学习笔记九——神经网络相关(1)
吴恩达<机器学习>学习笔记九--神经网络相关(1) 一. 非线性假设的问题 二. 神经网络相关知识 1.神经网络的大致历史 2.神经网络的表示 3.前向传播:向量化表示 三. 例子与直觉理 ...
- ROS学习笔记九:用C++编写ROS发布与订阅
ROS学习笔记九:用C++编写ROS发布与订阅 本节主要介绍如何用C++编写一个简单的ROS发布与订阅. 编写发布节点 在之前创建的例子beginner_tutorials软件包中,在其目录下的src ...
- at24c16如何划分出多个读写区_AVR学习笔记九、基于AT24C16的数据存储实验
Ema{@AVR 学习笔记九.基于 AT24C16 的数据存储实验 ------- 基于 LT_Mini_M16 9.1 用 I/O 口模拟 I2C 总线实现 AT24C16 的读写 9.1.1 .实 ...
- JavaScript学习笔记(九)(验证框架,layer弹出层)
JavaScript学习笔记(九) 一.jQuery Validate验证框架 1.引入相关插件路径 2. 修改一些规则 3. 自定义验证规则 4.异步验证 整体代码 二.layer弹出层 1.引入相 ...
- OpenCV学习笔记(九)——图像轮廓(下)
<OpenCV轻松入门:面向Python>学习笔记(九) 1-3 查找并绘制轮廓.矩特性及Hu矩 4-5 轮廓拟合及凸包 6. 利用形状场景算法比较轮廓 6.1 计算形状场景距离 6.2 ...
- Polyworks脚本开发学习笔记(九)-公差控制及制作报告
Polyworks脚本开发学习笔记(九)-公差控制及制作报告 定义公差 系统有默认的公差设置,可以在选项中进行系统的默认设置,但往往不是想要的.比如下图的XYZ三向都是-/+1,我想只控制Y向并且公差 ...
- 步步为营 .NET 代码重构学习笔记 九
步步为营 .NET 代码重构学习笔记系列 步步为营 .NET 代码重构学习笔记 一.为何要代码重构 步步为营 .NET 代码重构学习笔记 二.提炼方法(Extract Method) 步步为营 .NE ...
- [傅里叶变换及其应用学习笔记] 九. 继续卷积的讨论
这份是本人的学习笔记,课程为网易公开课上的斯坦福大学公开课:傅里叶变换及其应用. 卷积在滤波中的应用 浑浊度(Turbidity)研究是关于测量水的清澈度的研究.大致方法是把光传感器放置到深水区域,然 ...
最新文章
- unmappable character for encoding UTF8
- 单页面抓图并且保存的爬虫
- 「BZOJ 2152」聪聪可可
- 你还在用 Swagger?试试这个神器!
- shell配置,选择,环境变量修改(ORACLE_HOME,ORACLE_SID),无法使用sqlplus
- Eclipse中添加对Python的中文支持
- 有关机械手臂控制中的两个重要输入参数
- 前端学习(3048):vue+element今日头条管理-展示文章列表
- 惠普服务器查询ilo信息,Hp服务器iLO IML硬件日志收集与远程巡检
- android 自定义tabhost,安卓选项卡的实现方法(TabActivity),自定义TabHost容器
- windows的又一个问题
- 微信小程序-制作购物车
- ORB-SLAM总结
- 自己设计过App的数据库框架?还是只是停留在使用ormlite greenDao这类框架,一篇文章帮你解答...
- 创建枚举类 java_Java枚举类
- 《SPSS统计分析与行业应用实战》之房地产业中的应用
- 庆贺!浙江省建工集团智能线首根H型钢下线成功
- 【C语言程序设计·考试复习】视频讲解课程合集
- 操作系统总结(二)系统调用及系统结构
- python函数应用