资讯专栏INFORMATION COLUMN

用JAVA做一个爬虫程序——Gecco

Tony / 1825人阅读

摘要:是一个开源的简单的爬虫框架主要是通过将获取的网页信息封装成来进行爬取信息。作者也是一个新手。这篇文章只是提供一个入门的思路。开启多少个线程抓取隔多长时间抓取次部分。是用来抓取元素的连接是指获取得到的内容。并且这个类需要实现。

Gecco是一个开源的简单的java爬虫框架
主要是通过将获取的网页信息封装成HtmlBean来进行爬取信息。
作者也是一个新手。这篇文章只是提供一个入门的思路。
如果有不对的地方,还望指正。
咱们来爬取一下明星的信息。http://ku.ent.sina.com.cn/sta...
一些解释性的东西我大都写到注释里了。

1、入口程序

public class StarIndexPage{
    public static void main(String[] args) {
    String url = "http://ku.ent.sina.com.cn/star/search&page_no=1"; //想要爬取的网站的首页地址
    HttpGetRequest start = new HttpGetRequest(url); //获取网站请求
    start.setCharset("UTF-8");
    GeccoEngine.create() //创建搜索引擎
               .classpath("com.yue.gecco") //要搜索的包名,会自动搜索该包下,含@Gecco注解的文件。
               .start(start)   
               .thread(5)//开启多少个线程抓取
               .interval(2000) //隔多长时间抓取1次
               .run();
     }
}

2、HtmlBean部分。Gecco用到的注解部分很多。

@Gecco(matchUrl = "http://ku.ent.sina.com.cn/star/search&page_no={page}",pipelines {"consolePipeline","starIndexPagePipeline"})
//matchUrl是爬取相匹配的url路径,然后将获取到的HtmlBean输出到相应的管道(pipelines)进行处理。这里的管道是可以自定义的。
public class StarIndexPage implements HtmlBean {

private static final long serialVersionUID = 1225018257932399804L;

@Request   
private HttpRequest request;

//url中的page参数
@RequestParameter
private String  page;


//首页中的明星板块的集合,li的集合
@HtmlField(cssPath = "#dataListInner > ul >li")
private List lsStarDetail;
//@HtmlField(cssPath = "#dataListInner > ul >li")是用来抓取网页中的相应网页数据,csspath是jQuery的形式。
//cssPath获取小技巧:用Chrome浏览器打开需要抓取的网页,按F12进入发者模式。然后在浏览器右侧选中该元素,鼠标右键选择Copy–Copy selector,即可获得该元素的cssPath

//当前的页码,如果当前的是有很多页码的话,可以通过获取当前页码还有总页码,为继续抓取下一页做准备
//@Text是指抓取网页中的文本部分。@Html是指抓取Html代码。@Href是用来抓取元素的连接 @Ajax是指获取Ajax得到的内容。
@Text
@HtmlField(cssPath = "#dataListInner > div > ul > li.curr a")
private int currPageNum;

    //相应的Getter和Setter方法...省略
}

StarDetail的HtmlBean部分

public class StarDetail implements HtmlBean{

    /*//明星的照片
    @Image("src")
    @HtmlField(cssPath = "a > img")
    prie String PhotoString;*/

    //明星的名字
    @Html
    @HtmlField(cssPath ="div > div > h4")
    private String  starNameHtml;

    //明星的性别
    @Text
    @HtmlField(cssPath = "div > p:nth-child(2)")
    private  String starSex;

    //明星的职业
    @Html
    @HtmlField(cssPath = "div > p:nth-child(3)")
    private String professionHtml;

    //明星的国籍
    @Text
    @HtmlField(cssPath = " div > p:nth-child(4)")
    private String  nationality;

    //明星的出生日期
    @Text
    @HtmlField(cssPath = "div > p.special")
    private String birthday;

    //明星的星座
    @Text
    @HtmlField(cssPath = "div > p:nth-child(6)>a")
    private String constellation;

    //明星的身高
    @Text
    @HtmlField(cssPath = "div > p:nth-child(7)")
    private String height;

...省略相应的set和get方法...
}

3、相应的pipeline部分。这部分主要是对获取的网页元素进行业务处理。也可以对数据进行持久化。

@PipelineName("starIndexPagePipeline") 
 //@pipelineName 标签指定了pipline的名字。并且pipeline这个类需要实现Pipleline。
public class StarIndexPagePipeline implements Pipeline {

    @Override
    public void process(StarIndexPage starIndexPage) {

        List lsStarDetail = starIndexPage.getLsStarDetail();

        StringBuilder inputText =  new StringBuilder();

        for (StarDetail starDetail :lsStarDetail){
           String professionHtml=starDetail.getProfessionHtml();
           String starNameHtml=starDetail.getStarNameHtml();
            Document docName=Jsoup.parse(starNameHtml);
            String starName=docName.getElementsByTag("a").attr("title").trim();

            String starSex = starDetail.getStarSex().trim();
            Document doc = Jsoup.parse(professionHtml);
            String profession="未知"; //有不含a标签的,不含a标签的都是未知的
            if(professionHtml.indexOf("

解析工具推荐
Jsoup
中文文档:http://www.open-open.com/jsoup/
jsoup是一个解析Html的开源工具。

其他可供参考:官方例子:http://www.geccocrawler.com/d...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/67317.html

相关文章

  • Gecco的网络爬虫例子

    摘要:到了这个时候,我们已经可以把京东的分类首页的手机模块给抓取下来,并且保存成。 GeccoSpider爬虫例子 前些天,想要用爬虫抓取点东西,但是网上很多爬虫都是使用python语言的,本人只会java,因此,只能找相关java的爬虫资料,在开源中国的看到国内的大神写的一个开源的爬虫框架,并下源码研究了一下,发现跟官网描述的一样,够简单,简洁易用!有兴趣的朋友可以到官网了解下! 我这个例...

    raoyi 评论0 收藏0
  • Gecco的网络爬虫例子

    摘要:到了这个时候,我们已经可以把京东的分类首页的手机模块给抓取下来,并且保存成。 GeccoSpider爬虫例子 前些天,想要用爬虫抓取点东西,但是网上很多爬虫都是使用python语言的,本人只会java,因此,只能找相关java的爬虫资料,在开源中国的看到国内的大神写的一个开源的爬虫框架,并下源码研究了一下,发现跟官网描述的一样,够简单,简洁易用!有兴趣的朋友可以到官网了解下! 我这个例...

    Hydrogen 评论0 收藏0
  • cockroach 爬虫:又一个 java 爬虫实现

    摘要:爬虫又一个爬虫实现原文简介小强当时不知道为啥选了这么个名字,又长又难记,导致编码的过程中因为单词的拼写问题耽误了好长时间。我是一个小强爬虫线程数健壮说到健壮,这里主要体现在以下几个方面应对封锁这里我们使用动态代理来解决这个问题。 cockroach 爬虫:又一个 java 爬虫实现 原文 简介 cockroach[小强] 当时不知道为啥选了这么个名字,又长又难记,导致编码的过程中因为单...

    liangzai_cool 评论0 收藏0
  • Java爬虫之利Jsoup自制简单的搜索引擎

    摘要:的官方网址为,其使用手册网址为本次分享将实现的功能为利用爬取某个搜索词语暂仅限英文的百度百科的介绍部分,具体的功能介绍可以参考博客爬虫自制简单的搜索引擎。   Jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。Jsoup的官方网址为: https:...

    GHOST_349178 评论0 收藏0
  • 后端技术 - 收藏集 - 掘金

    摘要:理解迭代对象迭代器生成器后端掘金本文源自作者的一篇博文,原文是,俺写的这篇文章是按照自己的理解做的参考翻译。比较的是两个对象的内容是后端掘金黑魔法之协程异步后端掘金本文为作者原创,转载请先与作者联系。 完全理解关键字with与上下文管理器 - 掘金如果你有阅读源码的习惯,可能会看到一些优秀的代码经常出现带有 with 关键字的语句,它通常用在什么场景呢?今天就来说说 with 和 上下...

    oujie 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<