WebMagic初探,了解爬虫

在使用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
    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. 代码
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官方文档

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏恰童鞋骚年

ASP.Net WebForm温故知新学习笔记:二、ViewState与UpdatePanel探秘

开篇:经历了上一篇《aspx与服务器控件探秘》后,我们了解了aspx和服务器控件背后的故事。这篇我们开始走进WebForm状态保持的一大法宝—ViewState...

1663
来自专栏coding

听说,撸代码,ide与vim更配哦vim折腾记vim常用命令

在选择编辑器上面,我是一个纠结的人,曾经年少的我执着地追求一款万能的编辑器,可以支持所有编辑语言,灵活可定制,可纯粹用键盘操作。符合这种条件的编辑器,非vim莫...

1012
来自专栏开源FPGA

基于basys2驱动LCDQC12864B的verilog设计图片显示

  话不多说先上图 ? 前言        在做这个实验的时候在网上找了许多资料,都是关于使用单片机驱动LCD显示,确实用单片机驱动是要简单不少,记得在FPGA...

2525
来自专栏向治洪

android开发性能分析

1 背景 其实有点不想写这篇文章的,但是又想写,有些矛盾。不想写的原因是随便上网一搜一堆关于性能的建议,感觉大家你一总结、我一总结的都说到了很多优化注意事项...

2545
来自专栏哲学驱动设计

产品前端重构(TypeScript、MVC框架设计)

最近两周完成了对公司某一产品的前端重构,本文记录重构的主要思路及相关的设计内容。 公司期望把某一管理类信息系统从项目代码中抽取、重构为一个可复用的产品。该系统的...

2608
来自专栏進无尽的文章

扒虫篇- Bug日志 Ⅷ

不执行的原因是 在VC中使用这个ImageUploaderManager时,需要设置为全局变量,如果是局部变量的话,很快会被销毁掉,其中的代理自然不会执行了。

1913
来自专栏张善友的专栏

在你的网站集成Wiki系统 WikiPlex

Wikiplex 是一种在 .NET Framework 上所开发,具有处理 Wiki 编辑宏功能的小型函式库组件,它提供了数种编辑样式的格式,以让使用者可以类...

2208
来自专栏吉浦迅科技

DAY9:阅读CUDA异步并发执行中的Streams

4312
来自专栏Aloys的开发之路

Python第三方常用工具、库、框架等

       Python ImagingLibrary(PIL):它提供强大的图形处理的能力,并提供广泛的图形文件格式支持,该库能进行图形格式的转换、打印和显...

44510
来自专栏向治洪

Android逆向工程

在Root前提下,我们可以使用Hooker方式绑定so库,通过逆向方式篡改数值,从而达到所谓破解目的。然而,目前无论是软件加固方式,或是数据处理能力后台化,还是...

29310

扫码关注云+社区

领取腾讯云代金券