# 风铃虫

风铃虫是一款轻量级的爬虫工具,似风铃一样灵敏,如蜘蛛一般敏捷,能感知任何细小的风吹草动,轻松抓取互联网上的内容。它是一款对目标服务器相对友好的蜘蛛程序,内置了二十余种常见或不常见的浏览器标识,能够自动处理cookie和网页来源信息,轻松绕过服务器限制,智能调整请求间隔时间,动态调整请求频率,防止对目标服务器造成干扰。此外,风铃虫还是一款对普通用户十分友好的工具,它提供的大量链接提取器和内容提取器让用户可以随心所欲地快速配置,甚至于只要提供一个开始请求地址就能配置出自己爬虫程序。同时,风铃虫也开放了许多自定义接口,让高级用户能够根据需要自定义爬虫功能。最后,风铃虫还天然支持分布式和集群功能,让你突破单机环境的束缚,释放出你的爬虫能力。可以说,风铃虫几乎能抓取目前所有的网站里的绝大部分内容。

【声明】 请勿将风铃虫应用到任何可能会违反法律规定和道德约束的工作中,请友善使用风铃虫,遵守蜘蛛协议,不要将风铃虫用于任何非法用途。如您选择使用风铃虫即代表您遵守此协议,作者不承担任何由于您违反此协议带来任何的法律风险和损失,一切后果由您承担。


快速使用

<dependency>
    <groupId>com.yishuifengxiao.common</groupId>
    <artifactId>crawler</artifactId>
    <version>替换为最新的版本号</version>
</dependency>

风铃虫最新版本请参见 https://mvnrepository.com/artifact/com.yishuifengxiao.common/crawler

交流 QQ 群 :易水组件交流群 (群号 624646260)

简单使用

提取凤凰新闻的内容页的新闻标题


    //创建一个提取规则
    //该提取规则标识使用 XPATH提取器进行提取,
    //该XPATH提取器的XPATH表达式为 //h1/text() , 该提取提取器的作用顺序是0
    FieldExtractRule extractRule = new FieldExtractRule(Rule.XPATH, "//h1/text()", "", 0);

    //创建一个提取项
    ContentItem contentItem = new ContentItem();
    contentItem
        .setFiledName("name") //提取项代码,不能为空
        .setName("新闻标题") //提取项名字,可以不设置
        .setRules(Arrays.asList(extractRule)); //设置提取规则

    //创建一个风铃虫实例
    Crawler crawler = CrawlerBuilder.create()
             .startUrl("https://news.ifeng.com/c/7sMchCLy5se") //风铃虫的起始链接
             // 风铃虫会将每次请求的网页的内容中的URL先全部提取出来
            // 如果不设置则表示提取链接中所有包含域名关键字(例如此例中的ifeng)的链接放入链接池
            //链接池里的链接会作为下次抓取请求的种子链接
            //多以添加多个链接提取规则,
             .addLinkRule("http[s]?://news\\.ifeng\\.com/.*")//链接提取规则
            //可以设置多个内容页的规则,多个内容页规则之间用半角逗号隔开
            //只要内容页URL中完全匹配此规则就进行内容提取,如果不设置标识提取域名下所有的链接
             .extractUrl("https://news\\.ifeng\\.com/c/[A-Za-z0-9]+") //内容页的规则,
            //风铃虫可以设置多个提取项,这里为了演示只设置了一个提取项
             .addExtractItem(contentItem) //增加一个提取项
            //如果不设置则使用默认时间10秒,此值是为了防止抓取频率太高被服务器封杀
             .interval(30)//每次进行爬取时的平均间隔时间,单位为秒,
             .creatCrawler();
    //启动爬虫实例
    crawler.start();
    // 这里没有设置信息输出器,表示使用默认的信息输出器
    //默认的信息输出器使用的logback日志输出方法,因此需要看控制台信息

    //由于风铃虫时异步运行的,所以演示时这里加入循环
    while (Statu.STOP != crawler.getStatu()) {
            try {
                Thread.sleep(1000 * 20);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

上述例子的作用提取凤凰新闻的标题,如果用户想要提取其他信息,只需要按照规则配置好其他的提取规则即可。

注意 上述示例仅供学习演示所用,风铃虫使用者在抓取网页内容请严格遵守相关的法律规定和目标网站的蜘蛛协议


Last Updated: 1/6/2020, 9:10:45 PM