Gecco学习笔记(四)
2021SC@SDUSC
最近分析Gecco的爬虫代码,决定写个DEMO测试一下,也方便更好的分析其源代码,抓取网站
http://zj.zjol.com.cn/home.html,主要抓取新闻的标题和发布时间做为抓取测试对象。抓取HTML节点通过像Jquery选择器一样选择节点,非常方便,Gecco代码主要利用注解实现来实现URL匹配,看起来比较简洁美观。
添加Maven依赖
<dependency><groupId>com.geccocrawler</groupId><artifactId>gecco</artifactId><version>1.0.8</version>
</dependency>
编写抓取列表页面
@Gecco(matchUrl = "http://zj.zjol.com.cn/home.html?pageIndex={pageIndex}&pageSize={pageSize}",pipelines = "zJNewsListPipelines")
public class ZJNewsGeccoList implements HtmlBean {@Requestprivate HttpRequest request;@RequestParameterprivate int pageIndex;@RequestParameterprivate int pageSize;@HtmlField(cssPath = "#content > div > div > div.con_index > div.r.main_mod > div > ul > li > dl > dt > a")private List<HrefBean> newList;
}
@PipelineName("zJNewsListPipelines")
public class ZJNewsListPipelines implements Pipeline<ZJNewsGeccoList> {public void process(ZJNewsGeccoList zjNewsGeccoList) {HttpRequest request=zjNewsGeccoList.getRequest();for (HrefBean bean:zjNewsGeccoList.getNewList()){//进入祥情页面抓取SchedulerContext.into(request.subRequest("http://zj.zjol.com.cn"+bean.getUrl()));}int page=zjNewsGeccoList.getPageIndex()+1;String nextUrl = "http://zj.zjol.com.cn/home.html?pageIndex="+page+"&pageSize=100";//抓取下一页SchedulerContext.into(request.subRequest(nextUrl));}
}
编写抓取祥情页面
@Gecco(matchUrl = "http://zj.zjol.com.cn/news/[code].html" ,pipelines = "zjNewsDetailPipeline")
public class ZJNewsDetail implements HtmlBean {@Text@HtmlField(cssPath = "#headline")private String title ;@Text@HtmlField(cssPath = "#content > div > div.news_con > div.news-content > div:nth-child(1) > div > p.go-left.post-time.c-gray")private String createTime;
}
@PipelineName("zjNewsDetailPipeline")
public class ZJNewsDetailPipeline implements Pipeline<ZJNewsDetail> {public void process(ZJNewsDetail zjNewsDetail) {System.out.println(zjNewsDetail.getTitle()+" "+zjNewsDetail.getCreateTime());}
}
启动主函数
public class Main {public static void main(String [] rags){GeccoEngine.create()//工程的包路径.classpath("com.zhaochao.gecco.zj")//开始抓取的页面地址.start("http://zj.zjol.com.cn/home.html?pageIndex=1&pageSize=100")//开启几个爬虫线程.thread(10)//单个爬虫每次抓取完一个请求后的间隔时间.interval(10)//使用pc端userAgent.mobile(false)//开始运行.run();}
}
Gecco学习笔记(四)相关推荐
- C#可扩展编程之MEF学习笔记(四):见证奇迹的时刻
前面三篇讲了MEF的基础和基本到导入导出方法,下面就是见证MEF真正魅力所在的时刻.如果没有看过前面的文章,请到我的博客首页查看. 前面我们都是在一个项目中写了一个类来测试的,但实际开发中,我们往往要 ...
- IOS学习笔记(四)之UITextField和UITextView控件学习
IOS学习笔记(四)之UITextField和UITextView控件学习(博客地址:http://blog.csdn.net/developer_jiangqq) Author:hmjiangqq ...
- RabbitMQ学习笔记四:RabbitMQ命令(附疑难问题解决)
RabbitMQ学习笔记四:RabbitMQ命令(附疑难问题解决) 参考文章: (1)RabbitMQ学习笔记四:RabbitMQ命令(附疑难问题解决) (2)https://www.cnblogs. ...
- JSP学习笔记(四十九):抛弃POI,使用iText生成Word文档
POI操作excel的确很优秀,操作word的功能却不敢令人恭维.我们可以利用iText生成rtf文档,扩展名使用doc即可. 使用iText生成rtf,除了iText的包外,还需要额外的一个支持rt ...
- Ethernet/IP 学习笔记四
Ethernet/IP 学习笔记四 EtherNet/IP Quick Start for Vendors Handbook (PUB213R0): https://www.odva.org/Port ...
- OpenCV学习笔记四-image的一些整体操作
title: OpenCV学习笔记四-image的一些整体操作 categories: 编程 date: 2019-08-08 12:50:47 tags: OpenCV image的一些操作 sP4 ...
- 吴恩达《机器学习》学习笔记四——单变量线性回归(梯度下降法)代码
吴恩达<机器学习>学习笔记四--单变量线性回归(梯度下降法)代码 一.问题介绍 二.解决过程及代码讲解 三.函数解释 1. pandas.read_csv()函数 2. DataFrame ...
- esp8266舵机驱动_arduino开发ESP8266学习笔记四—–舵机
arduino开发ESP8266学习笔记四-–舵机 使用时发现会有ESP8266掉电的情况,应该是板上的稳压芯片的限流导致的,观测波形,发现当舵机运转时,电源线3.3V不再是稳定的3.3V,大概是在3 ...
- mysql新增表字段回滚_MySql学习笔记四
MySql学习笔记四 5.3.数据类型 数值型 整型 小数 定点数 浮点数 字符型 较短的文本:char, varchar 较长的文本:text, blob(较长的二进制数据) 日期型 原则:所选择类 ...
- ROS学习笔记四:理解ROS节点
ROS学习笔记四:理解ROS节点 本节主要介绍ROS图形概念,讨论ROS命令行工具roscore.rosnode和rosrun. 要求 要求已经在Linux系统中安装一个学习用的ros软件包例子: s ...
最新文章
- 【控制】《多无人机协同控制技术》周伟老师-第2章-多无人机协同控制体系结构
- EasyX实现推箱子游戏
- 软考准考证打印详细步骤(打印一张纸上)
- Leetcode--268. 缺失数字
- desktop docker 无法卸载_关于Docker:Docker – 无法移除死容器
- 计算机图形学Web前端笔记-图形平移放缩原理及实现(two.js鼠标事件适用所有渲染)
- 基于Node.js实现压缩和解压缩的方法
- android surface编程,Android编程之SurfaceView实例详解
- 利用appscan进行自动化定期安全测试
- 一文总结《Effective C++》
- Karoly Nyisztor
- wpf demo (gif , multithredading,httpwatch)
- 折线分割平面(递推dp)
- matlab灰色关联分析,灰色关联度分析(为什么不显示图像)大佬们帮我看看
- 计算机应用if函数题目,if函数练习题.doc
- 2023 年 5 大人工智能 (AI) 趋势
- 不再发烧,小米 11 推送降温补丁
- 建立统一标准的教育大数据
- web前端培训靠谱吗,收费怎么样?
- Rust之包,箱和模块管理(四):用use关键字引用其他包