前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >WebMagic初探,了解爬虫

WebMagic初探,了解爬虫

作者头像
tanoak
发布2018-06-06 13:15:58
7040
发布2018-06-06 13:15:58
举报
文章被收录于专栏:java闲聊

在使用webMagic之前,先了解一下几个基本的知识

  1. 爬虫,可以理解为在网络上爬行的一直蜘蛛,互联网就比作一张大网,而爬虫便是在这张网上爬来爬去的蜘蛛咯,如果它遇到资源,那么它就会抓取下来。
  2. Xpath Xpath的全称是 XML Path Language,XPath是一种称为路径表达式的语法,定位到XML或HTML中的任意一个或多个节点元素,获取元素的各项信息,在解析结构比较规整的XML或HTML文档的时候,用XPath路径表达式非常快速、方便。 对于概念看不懂也没关系,可以先看下面的代码然后再回过头来理解这些概念,这样可以加深对爬虫的理解

下面是WebMagic的架构图,从图中可以看出WebMagic有四个组件

  1. WebMagic组件 a. Downloader Downloader负责从互联网上下载页面,以便后续处理。WebMagic默认使用了Apache HttpClient作为下载工具。

b. PageProcessor PageProcessor负责解析页面,抽取有用信息,以及发现新的链接。WebMagic使用Jsoup作为HTML解析工具,并基于其开发了解析XPath的工具Xsoup。

c. Scheduler Scheduler负责管理待抓取的URL,以及一些去重的工作。WebMagic默认提供了JDK的内存队列来管理URL,并用集合来进行去重。也支持使用Redis进行分布式管理。

d. Pipeline Pipeline负责抽取结果的处理,包括计算、持久化到文件、数据库等。WebMagic默认提供了“输出到控制台”和“保存到文件”两种结果处理方案。

  1. 导入依赖项目使用的是Gradle
代码语言:javascript
复制
    testCompile group: 'junit', name: 'junit', version: '4.9'
    compile group: 'us.codecraft', name: 'webmagic-core', version: '0.7.3'
    compile group: 'us.codecraft', name: 'webmagic-extension', version: '0.7.3'
  1. 代码
代码语言:javascript
复制
public class CnBlogProcessor implements PageProcessor {
    //抓取网站的相关配置、编码、抓取间隔、重试次数等

    private Site site = Site.me().setRetryTimes(3).setSleepTime(100);

    //计数器
    private static int count = 0 ;

    @Override
    public void process(Page page) {
        //判断连接是否满足
        boolean flag = page.getUrl().regex("https://www.cnblogs.com/[a-z 0-9 -]+/p/[0-9]{7}.html").match();
        if(!flag){
            //加入满足条件的连接  xpath选取要爬取的div
            page.addTargetRequests(page.getHtml().xpath("//*[@id=\"post_list\"]/div/div[@class='post_item_body']/h3/a/@href").all());
        }else {
            System.out.println("抓到的内容\n"+page.getHtml());
            count++ ;
        }
    }

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

    public static void main(String[] args) {
        Spider.create(new CnBlogProcessor()).addUrl("https://www.cnblogs.com/").thread(5).run();
        System.out.println("结束了"+count);
    }
}

这是一个简单爬取博客园文章的小demo,主要的重点是正则的编写以及熟悉xpath的基本概念,在要爬取指定的内容时,使用xpath可以很方便的定位到要取得元素,网页中标签的xpath怎么获取呢?首先打开开发者工具,然后选定某一元素

因为要选中鼠标右键,截图的时候鼠标会跳动一下,没办法截全。这篇文章带大家简单入门,下一篇文章带大家深入了解,如有错误,请指正 WebMagic官方文档

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.06.06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档