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学习笔记(四)相关推荐

  1. C#可扩展编程之MEF学习笔记(四):见证奇迹的时刻

    前面三篇讲了MEF的基础和基本到导入导出方法,下面就是见证MEF真正魅力所在的时刻.如果没有看过前面的文章,请到我的博客首页查看. 前面我们都是在一个项目中写了一个类来测试的,但实际开发中,我们往往要 ...

  2. IOS学习笔记(四)之UITextField和UITextView控件学习

    IOS学习笔记(四)之UITextField和UITextView控件学习(博客地址:http://blog.csdn.net/developer_jiangqq) Author:hmjiangqq ...

  3. RabbitMQ学习笔记四:RabbitMQ命令(附疑难问题解决)

    RabbitMQ学习笔记四:RabbitMQ命令(附疑难问题解决) 参考文章: (1)RabbitMQ学习笔记四:RabbitMQ命令(附疑难问题解决) (2)https://www.cnblogs. ...

  4. JSP学习笔记(四十九):抛弃POI,使用iText生成Word文档

    POI操作excel的确很优秀,操作word的功能却不敢令人恭维.我们可以利用iText生成rtf文档,扩展名使用doc即可. 使用iText生成rtf,除了iText的包外,还需要额外的一个支持rt ...

  5. Ethernet/IP 学习笔记四

    Ethernet/IP 学习笔记四 EtherNet/IP Quick Start for Vendors Handbook (PUB213R0): https://www.odva.org/Port ...

  6. OpenCV学习笔记四-image的一些整体操作

    title: OpenCV学习笔记四-image的一些整体操作 categories: 编程 date: 2019-08-08 12:50:47 tags: OpenCV image的一些操作 sP4 ...

  7. 吴恩达《机器学习》学习笔记四——单变量线性回归(梯度下降法)代码

    吴恩达<机器学习>学习笔记四--单变量线性回归(梯度下降法)代码 一.问题介绍 二.解决过程及代码讲解 三.函数解释 1. pandas.read_csv()函数 2. DataFrame ...

  8. esp8266舵机驱动_arduino开发ESP8266学习笔记四—–舵机

    arduino开发ESP8266学习笔记四-–舵机 使用时发现会有ESP8266掉电的情况,应该是板上的稳压芯片的限流导致的,观测波形,发现当舵机运转时,电源线3.3V不再是稳定的3.3V,大概是在3 ...

  9. mysql新增表字段回滚_MySql学习笔记四

    MySql学习笔记四 5.3.数据类型 数值型 整型 小数 定点数 浮点数 字符型 较短的文本:char, varchar 较长的文本:text, blob(较长的二进制数据) 日期型 原则:所选择类 ...

  10. ROS学习笔记四:理解ROS节点

    ROS学习笔记四:理解ROS节点 本节主要介绍ROS图形概念,讨论ROS命令行工具roscore.rosnode和rosrun. 要求 要求已经在Linux系统中安装一个学习用的ros软件包例子: s ...

最新文章

  1. 【控制】《多无人机协同控制技术》周伟老师-第2章-多无人机协同控制体系结构
  2. EasyX实现推箱子游戏
  3. 软考准考证打印详细步骤(打印一张纸上)
  4. Leetcode--268. 缺失数字
  5. desktop docker 无法卸载_关于Docker:Docker – 无法移除死容器
  6. 计算机图形学Web前端笔记-图形平移放缩原理及实现(two.js鼠标事件适用所有渲染)
  7. 基于Node.js实现压缩和解压缩的方法
  8. android surface编程,Android编程之SurfaceView实例详解
  9. 利用appscan进行自动化定期安全测试
  10. 一文总结《Effective C++》
  11. Karoly Nyisztor
  12. wpf demo (gif , multithredading,httpwatch)
  13. 折线分割平面(递推dp)
  14. matlab灰色关联分析,灰色关联度分析(为什么不显示图像)大佬们帮我看看
  15. 计算机应用if函数题目,if函数练习题.doc
  16. 2023 年 5 大人工智能 (AI) 趋势
  17. 不再发烧,小米 11 推送降温补丁
  18. 建立统一标准的教育大数据
  19. web前端培训靠谱吗,收费怎么样?
  20. Rust之包,箱和模块管理(四):用use关键字引用其他包

热门文章

  1. 0319 预习笔记和直播笔记
  2. 连接两个字符串(不允许使用库函数)
  3. px、pt、em与rem的区别(结尾不容错过哦)
  4. AntSword 中国蚁剑的下载安装配置(附下载文件)
  5. Linux工具之numactl
  6. ETL 几家欢喜,几家愁 之数据,数据流,数据管道(二)
  7. FPGA学习之路-fpga术语与zynq7000HDMI显示
  8. 率土之滨鸿蒙之初,率土之滨黑科技第5期:上阵姐妹花,S1赛季大小乔吊打大汉弓...
  9. 单片机STM32的引脚模式设置
  10. ios 获取沙河文件夹_沙盒路径获取以及图片保存到相簿的方法