Gecco的简单使用(附demo)该文章仅用于学习,谢谢

  • Gecco的Maven的xml引入
    • Gecco的简单代码
        • 1.Frist 第一个,用于锁定需要爬取的代码块,如下面代码的@HtmlField(cssPath)的内容,就是锁定了专属的dl,如下代码的main是爬取开始的地方,可以写在其它类里
        • 2.Frist_type 第二个,表示Frist的拓展,在dl的下面进行细节爬取,这样做可以降低搜索时间和减少重复路径的爬取,简单来说就是将一个页面的html截取出来一个dl块,然后在dl块里进行信息爬取,而不是一直在html里爬取,如下代码
        • 3.Second,一个轮回的最后一个类,用于爬取信息,当然,一个正经的爬虫是不止一个轮回的,还涉及到多个url地址的爬取,本内容将一个url的爬取称为一个轮回,前两个类已经将爬取的目标锁定到了文本@Text上,所以就可以进行爬取了,如下代码:
        • 4.运行结果
      • `友情提示:`当然,如果你觉得这就完了,那你就只能爬取一个url页面里的信息,毕竟你从头到尾只用了一个url,接下来才是gecco真正实用的地方,如何将爬取到的url进行再爬取,这才是关键。下面是同样的Second的demo,我取了第一个url进行爬取,获取出来的url是没有页数的,所以我们需要再页面上点击一下页数1然后得到第一页的url,将url补全,关键性的代码就以下两条,写了这两条就能进行第二次轮回,当然,也得写一个和Frist类似的demo来对url进行绑定,不然会报错的!
      • `注:HrefBean是自带的,不用写,一般用于链接的list,可以直接通过getTitle得到文本信息,getUrl获得url`

观看以下代码,需要了解一些@操作,因此请先看http://www.geccocrawler.com/sysc-5/

Gecco的Maven的xml引入

  <dependencies><dependency><groupId>com.geccocrawler</groupId><artifactId>gecco</artifactId><version>1.3.0</version></dependency><dependency><groupId>com.geccocrawler</groupId><artifactId>gecco-spring</artifactId><version>1.3.0</version></dependency><dependency><groupId>com.geccocrawler</groupId><artifactId>gecco-htmlunit</artifactId><version>1.0.9</version></dependency><dependency><groupId>com.geccocrawler</groupId><artifactId>gecco-redis</artifactId><version>1.3.0</version></dependency></dependencies>

Gecco的简单代码

1.Frist 第一个,用于锁定需要爬取的代码块,如下面代码的@HtmlField(cssPath)的内容,就是锁定了专属的dl,如下代码的main是爬取开始的地方,可以写在其它类里

package cn.baibai;import com.geccocrawler.gecco.GeccoEngine;
import com.geccocrawler.gecco.annotation.Gecco;
import com.geccocrawler.gecco.annotation.HtmlField;
import com.geccocrawler.gecco.annotation.Request;
import com.geccocrawler.gecco.request.HttpRequest;
import com.geccocrawler.gecco.spider.HtmlBean;
import java.util.List;@Gecco(matchUrl="https://www.jd.com/allSort.aspx",pipelines = "second")
public class Frist implements HtmlBean {@Requestprivate HttpRequest request;@HtmlField(cssPath = "div.category-items > div:nth-child(1) > div:nth-child(2) > div.mc > div.items > dl")private List<Frist_type> icons;public List<Frist_type> getIcons() { return icons; }public void setIcons(List<Frist_type> icons) {this.icons = icons;}public HttpRequest getRequest() {return request;}public void setRequest(HttpRequest request) {this.request = request;}public static void main(String[] args) {GeccoEngine.create()//Gecco搜索的包路径.classpath("cn.baibai")//开始抓取的页面地址.start("https://www.jd.com/allSort.aspx")//开启几个爬虫线程.thread(1)//单个爬虫每次抓取完一个请求后的间隔时间.interval(2000).start();}
}

2.Frist_type 第二个,表示Frist的拓展,在dl的下面进行细节爬取,这样做可以降低搜索时间和减少重复路径的爬取,简单来说就是将一个页面的html截取出来一个dl块,然后在dl块里进行信息爬取,而不是一直在html里爬取,如下代码

package cn.baibai;import com.geccocrawler.gecco.annotation.Href;
import com.geccocrawler.gecco.annotation.HtmlField;
import com.geccocrawler.gecco.annotation.Text;
import com.geccocrawler.gecco.spider.HrefBean;
import com.geccocrawler.gecco.spider.HtmlBean;
import java.util.List;public class Frist_type implements HtmlBean {@Text@HtmlField(cssPath="dt > a")private String parentName;@HtmlField(cssPath = "dd > a")private List<HrefBean> hrefBeans;public String getParentName() {return parentName;}public void setParentName(String parentName) {this.parentName = parentName;}public List<HrefBean> getHrefBeans() {return hrefBeans;}public void setHrefBeans(List<HrefBean> hrefBeans) {this.hrefBeans = hrefBeans;}}

3.Second,一个轮回的最后一个类,用于爬取信息,当然,一个正经的爬虫是不止一个轮回的,还涉及到多个url地址的爬取,本内容将一个url的爬取称为一个轮回,前两个类已经将爬取的目标锁定到了文本@Text上,所以就可以进行爬取了,如下代码:

package cn.baibai;import com.geccocrawler.gecco.annotation.PipelineName;
import com.geccocrawler.gecco.pipeline.Pipeline;
import com.geccocrawler.gecco.request.HttpRequest;
import com.geccocrawler.gecco.scheduler.SchedulerContext;
import com.geccocrawler.gecco.spider.HrefBean;
import java.util.List;@PipelineName("second")
public class Second implements Pipeline<Frist> {@Overridepublic void process(Frist frist) {List<Frist_type> frist_types = frist.getIcons();for (Frist_type fr : frist_types) {List<HrefBean> hrefs = fr.getHrefBeans();for (HrefBean href:hrefs) {System.out.println(href.getUrl());System.out.println(href.getTitle());}}}
}

4.运行结果

友情提示:当然,如果你觉得这就完了,那你就只能爬取一个url页面里的信息,毕竟你从头到尾只用了一个url,接下来才是gecco真正实用的地方,如何将爬取到的url进行再爬取,这才是关键。下面是同样的Second的demo,我取了第一个url进行爬取,获取出来的url是没有页数的,所以我们需要再页面上点击一下页数1然后得到第一页的url,将url补全,关键性的代码就以下两条,写了这两条就能进行第二次轮回,当然,也得写一个和Frist类似的demo来对url进行绑定,不然会报错的!

HttpRequest currRequest = frist.getRequest(); SchedulerContext.into(currRequest.subRequest(href));

package cn.baibai;import com.geccocrawler.gecco.annotation.PipelineName;
import com.geccocrawler.gecco.pipeline.Pipeline;
import com.geccocrawler.gecco.request.HttpRequest;
import com.geccocrawler.gecco.scheduler.SchedulerContext;
import com.geccocrawler.gecco.spider.HrefBean;import java.io.*;
import java.util.List;
@PipelineName("second")
public class Second implements Pipeline<Frist> {@Overridepublic void process(Frist frist) {List<Frist_type> frist_types = frist.getIcons();for (Frist_type fr : frist_types) {List<HrefBean> hrefs = fr.getHrefBeans();String href = hrefs.get(0).getUrl() + "&page=1&sort=sort_rank_asc&trans=1&JL=6_0_0&ms=10";System.out.println("******" + href);HttpRequest currRequest = frist.getRequest();SchedulerContext.into(currRequest.subRequest(href));break;}}
}

注:HrefBean是自带的,不用写,一般用于链接的list,可以直接通过getTitle得到文本信息,getUrl获得url

Gecco的简单使用(附demo)该文章仅用于学习,谢谢相关推荐

  1. C#开发微信公众平台-就这么简单(附Demo)(转)

    原文:http://www.cnblogs.com/xishuai/p/3625859.html 写在前面 阅读目录: 服务号和订阅号 URL配置 创建菜单 查询.删除菜单 接受消息 发送消息(图文. ...

  2. C#开发微信公众平台-就这么简单(附Demo)

    相关文档:https://www.google.com/search?site=&source=hp&q=C%23+%E5%BE%AE%E4%BF%A1%E5%BC%80%E5%8F% ...

  3. IoC容器Autofac(2) - 一个简单示例(附demo源码)

    上篇文章中(IoC容器Autofac(1) -- 什么是IoC以及理解为什么要使用Ioc),我们用自己的方式实现了一个简陋的工厂类来实现IoC. 这里我们尝试使用Auotfac来替换我们的工厂类Mov ...

  4. 欢迎随时回家——python制作一个火车票抢票版本(附完整代码,仅供学习参考)

    嗨害大家好鸭~我是小熊猫

  5. html5霓虹效果代码,纯CSS实现酷炫的霓虹灯效果(附demo)

    最近关注了油管上的 CSS Animation Effects Tutorial 系列,里面介绍了非常多有意思的 CSS 动效.其中第一个就是很酷炫的霓虹灯效果,这里就实现思路做一个简单的记录和分享. ...

  6. 流媒体弱网优化之路(FEC)——FEC的应用奥秘(附demo)

    流媒体弱网优化之路(FEC)--FEC的应用奥秘(附demo) 文章目录 流媒体弱网优化之路(FEC)--FEC的应用奥秘(附demo) 一.FEC应用简析 1.1 FEC原理简述 1.2 FEC编码 ...

  7. 基于opencv和pillow实现人脸识别系统(附demo)

    更多python教程请到友情连接: 菜鸟教程https://www.piaodoo.com 初中毕业读什么技校 http://cntkd.net 茂名一技http://www.enechn.com p ...

  8. iOS设计模式四部曲(二) 结构型模式 内附Demo

    本篇是四部曲的第二篇,第一篇请点这里iOS设计模式四部曲(一):创建型模式 内附Demo,关于设计模式强烈推荐图书<Head First设计模式>以及<研磨设计模式>.由于个人 ...

  9. 提升开发效率N倍的20+命令行神器!(附 demo)

    点击上方蓝色字体,关注我 -- 一个在阿里云打工的清华学渣! 图 by:石头@青海湖 关于作者:程序猿石头(ID: tangleithu),现任阿里巴巴技术专家,清华学渣,前大疆后端 Leader.以 ...

最新文章

  1. c 应用程序多语言版本,c – 在win32 API应用程序中实现全球化/多语言功能
  2. linux 问题 value too large for defined data type 解决方案
  3. 查询 oracle_关于oracle和mysql数据库的查询问题
  4. JavaScript如何获取/计算页面元素的offset?
  5. RAID 01 和RAID 10的区别
  6. QQ,MSN,Skype在线客服代码
  7. JVM架构和GC垃圾回收机制--面试
  8. opensource项目_最佳Opensource.com:硬件
  9. 第一百六十三天 how can I 坚持
  10. Toad for Oracle Authorization key
  11. Acrobat Pro DC 教程,如何使用文本和图片文件创建 PDF?
  12. fatjar: eclipse导出工具
  13. 为什么我们要写单元测试用例?
  14. 解读——等级保护定级指南
  15. 城市生态规划关键技术方法之六:情景分析方法
  16. 正态分布是离散分布还是连续分布_内容范围:正态分布,泊松分布,多项分布,二项分布,伯努利分布...
  17. 中科院计算所是怎样的存在?院校详情大盘点!
  18. 解决在命令行中出现/usr/local/hadoop/libexec/hadoop-functions.sh: 行 1185: dirname: 未找到命令
  19. 网络安全技术——DHCP技术
  20. Java常用设计模式(三)

热门文章

  1. 阿里云短信验证出现签名不合法(不存在或被拉黑)
  2. Elasticsearch入门、Kibana 索引管理(elasticserch-head 插件使用, Kibanan 安装和使用)
  3. 云象黄步添:区块链和隐私计算打破数据安全流动矛盾,构建数据要素市场基石
  4. session共享的四种方式
  5. android n beta,荣耀 NOTE 8 N版本(EMUI5.0+Android7.0)Beta内测正式招募
  6. IntelliJ IDEA 设置黑色背景
  7. 模拟键盘、鼠标操作或Windows hook 在部分软件失效的问题
  8. 获得自定义的所有相簿
  9. 大数据Java基础之异常
  10. plsql结束_SQL记录-PLSQL-EXIT/CONTINUE/GOTO