文档章节

基于 webmagic 爬取 网页数据

西二旗之猫
 西二旗之猫
发布于 2017/04/14 17:24
字数 561
阅读 81
收藏 1

概述:

       webmagic是一个开源的java语言爬虫框架,参考官网http://webmagic.io/,

       本篇博客介绍爬取  码云的"最新推荐",网址:https://git.oschina.net/explore/recommend

代码

package leap.crawler;

import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.Spider;
import us.codecraft.webmagic.pipeline.JsonFilePipeline;
import us.codecraft.webmagic.processor.PageProcessor;
import us.codecraft.webmagic.selector.Html;
import us.codecraft.webmagic.selector.Selectable;

import java.util.List;

/**
 * Created by FromX on 2017/4/14.
 * 爬取 开源中国
 */
public class OschinaCrawler implements PageProcessor {

    private Site site = Site.me().setRetryTimes(3).setSleepTime(1000).setTimeOut(10000);

    @Override
    public Site getSite() {
        return site;
    }

    @Override
    public void process(Page page) {


        //  爬取项目名, 作者, 描述, 星等
        List<String> contents = page.getHtml().xpath("//div[@class=\"item\"]//div[@class='content']").all();

        StringBuffer sb = new StringBuffer();

        String title="";
        String language="";
        String attention="";
        String collection="";
        String fork="";
        String desc="";
        Html html = null;
        int i=0;
        for (String content:contents){
             html = new Html(content);
            if(html.xpath("//div[@class='project-title']/a/text()").equals(null)){
                title=" ";
            }else{
                title=html.xpath("//div[@class='project-title']/a/text()").toString();
            }

            if(html.xpath("//div[@class='project-title']//div[@class='ui small label lang-label']/a/text()").equals(null)){
                language=" ";
            }else{
                language=html.xpath("//div[@class='project-title']//div[@class='ui small label lang-label']/a/text()").toString();
            }

            if(html.xpath("//div[@class='project-title']//div[@class='pull-right']//a[@title='关注数']//span/text()").equals(null)){
                attention=" ";
            }else{
                attention=html.xpath("//div[@class='project-title']//div[@class='pull-right']//a[@title='关注数']//span/text()").toString();
            }

            if(html.xpath("//div[@class='project-title']//div[@class='pull-right']//a[@title='收藏数']//span/text()").equals(null)){
                collection=" ";
            }else{
                collection=html.xpath("//div[@class='project-title']//div[@class='pull-right']//a[@title='收藏数']//span/text()").toString();
            }

            if(html.xpath("//div[@class='project-title']//div[@class='pull-right']//a[@title='fork数']//span/text()").equals(null)){
                fork=" ";
            }else{
                fork=html.xpath("//div[@class='project-title']//div[@class='pull-right']//a[@title='fork数']//span/text()").toString();
            }

            if(html.xpath("//div[@class='project-desc']/text()").equals(null)){
                desc=" ";
            }else{
                desc=html.xpath("//div[@class='project-desc']/text()").toString();
            }


            page.putField("data" + i, "{'title':"+title+",'language':"+language+",'attention':"+attention+"" +
                    ",'collection':"+collection+",'fork':"+fork+",'desc':"+desc+"}");
            sb.setLength(0);
            i++;
        }





//        page.putField("language", page.getHtml().xpath("//div[@class=\"item\"]//div[@class='content']//div[@class='project-title']//div[@class='ui small label lang-label']/a/text()").toString());
//        page.putField("attention", page.getHtml().xpath("//div[@class=\"item\"]//div[@class='content']//div[@class='project-title']//div[@class='pull-right']//a[@title='关注数']//span/text()").toString());
//        page.putField("Collection", page.getHtml().xpath("//div[@class=\"item\"]//div[@class='content']//div[@class='project-title']//div[@class='pull-right']//a[@title='收藏数']//span/text()").toString());
//        page.putField("fork", page.getHtml().xpath("//div[@class=\"item\"]//div[@class='content']//div[@class='project-title']//div[@class='pull-right']//a[@title='fork数']//span/text()").toString());
//        page.putField("desc", page.getHtml().xpath("//div[@class=\"item\"]//div[@class='content']//div[@class='project-desc']/text()").toString());

// 部分三:从页面发现后续的url地址来抓取
        page.addTargetRequests(page.getHtml().xpath("//div[@class=\"ui tiny pagination menu\"]").links().all());

    }

    public static void main(String[] args) {

        Spider.create(new OschinaCrawler())
                //从"https://github.com/code4craft"开始抓
                .addUrl("https://git.oschina.net/explore/recommend")
                .addPipeline(new JsonFilePipeline("D:\\webmagic\\"))
                //开启5个线程抓取
                .thread(10)
                //启动爬虫
                .run();
    }

}

maven 依赖

<!-- webmagic 爬虫-->
        <dependency>
            <groupId>us.codecraft</groupId>
            <artifactId>webmagic-core</artifactId>
            <version>0.6.1</version>
        </dependency>
        <dependency>
            <groupId>us.codecraft</groupId>
            <artifactId>webmagic-extension</artifactId>
            <version>0.6.1</version>
        </dependency>

 

© 著作权归作者所有

西二旗之猫
粉丝 7
博文 53
码字总数 38138
作品 0
私信 提问
webmagic网络爬虫将爬取到的内容保存到本地文件夹,怎么把本地文件夹路径存到数据库中

使用webmagic爬取数据,将网页标题,作者,评论数,点赞数等存储到数据库中, 将网页具体内容存储到本地文件夹,通过 Spider.create(new StoreXXPage()).addUrl("https://www.oschina.net/b...

Nicll
2018/01/03
777
2
记一次初学Webmagic的踩坑之旅:爬取知乎数据

好久没更新博客了,最近在做一个知乎的小爬虫 webmagic是一个简单灵活的Java爬虫框架。基于WebMagic,支持多线程爬取,爬取逻辑明确、是一个易维护的爬虫。 官方给出的流程图是像下面这样的:...

语落心生
2018/11/02
0
0
webmagic的设计机制及原理-如何开发一个Java爬虫

此文章是webmagic 0.1.0版的设计手册,后续版本的入门及用户手册请看这里:https://github.com/code4craft/webmagic/blob/master/user-manual.md 之前就有网友在博客里留言,觉得webmagic的实...

黄亿华
2013/07/20
67.3K
94
webmagic 0.1.0版本发布,Java垂直爬虫框架

第一个正式版本。 修改了若干API,使得可扩展性更强,重写了Pipeline接口,将抽取结果集包装到ResultItems对象,便于逻辑分离。 增加下载的重试机制,支持gzip,支持自定义UA/cookie。 增加多...

黄亿华
2013/07/25
1K
13
webmagic登陆爬取问题请教!

关于webmagic登陆爬取页面,有啥示例代码么? @黄亿华 黄亿华/webmagic

铂金蕃茄
2013/12/04
5.2K
9

没有更多内容

加载失败,请刷新页面

加载更多

OpenStack 简介和几种安装方式总结

OpenStack :是一个由NASA和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开放源代码项目。项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。OpenSta...

小海bug
昨天
6
0
DDD(五)

1、引言 之前学习了解了DDD中实体这一概念,那么接下来需要了解的就是值对象、唯一标识。值对象,值就是数字1、2、3,字符串“1”,“2”,“3”,值时对象的特征,对象是一个事物的具体描述...

MrYuZixian
昨天
6
0
数据库中间件MyCat

什么是MyCat? 查看官网的介绍是这样说的 一个彻底开源的,面向企业应用开发的大数据库集群 支持事务、ACID、可以替代MySQL的加强版数据库 一个可以视为MySQL集群的企业级数据库,用来替代昂贵...

沉浮_
昨天
6
0
解决Mac下VSCode打开zsh乱码

1.乱码问题 iTerm2终端使用Zsh,并且配置Zsh主题,该主题主题需要安装字体来支持箭头效果,在iTerm2中设置这个字体,但是VSCode里这个箭头还是显示乱码。 iTerm2展示如下: VSCode展示如下: 2...

HelloDeveloper
昨天
8
0
常用物流快递单号查询接口种类及对接方法

目前快递查询接口有两种方式可以对接,一是和顺丰、圆通、中通、天天、韵达、德邦这些快递公司一一对接接口,二是和快递鸟这样第三方集成接口一次性对接多家常用快递。第一种耗费时间长,但是...

程序的小猿
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部