实现PageProcessor

4.1 实现PageProcessor

这部分我们直接通过GithubRepoPageProcessor这个例子来介绍PageProcessor的编写方式。我将PageProcessor的定制分为三个部分,分别是爬虫的配置、页面元素的抽取和链接的发现。

public class GithubRepoPageProcessor implements PageProcessor {

 

    // 部分一:抓取网站的相关配置,包括编码、抓取间隔、重试次数等

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

 

    @Override

    // process是定制爬虫逻辑的核心接口,在这里编写抽取逻辑

    public void process(Page page) {

        // 部分二:定义如何抽取页面信息,并保存下来

        page.putField("author", page.getUrl().regex("https://github\\.com/(\\w+)/.*").toString());

        page.putField("name", page.getHtml().xpath("//h1[@class='entry-title public']/strong/a/text()").toString());

        if (page.getResultItems().get("name") == null) {

            //skip this page

            page.setSkip(true);

        }

        page.putField("readme", page.getHtml().xpath("//div[@id='readme']/tidyText()"));

 

        // 部分三:从页面发现后续的url地址来抓取

        page.addTargetRequests(page.getHtml().links().regex("(https://github\\.com/\\w+/\\w+)").all());

    }

 

    @Override

    public Site getSite() {

        return site;

    }

 

    public static void main(String[] args) {

 

        Spider.create(new GithubRepoPageProcessor())

                //从"https://github.com/code4craft"开始抓

                .addUrl("https://github.com/code4craft")

                //开启5个线程抓取

                .thread(5)

                //启动爬虫

                .run();

    }

}

posted @   long77  阅读(1442)  评论(0编辑  收藏  举报
编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· 百万级群聊的设计实践
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
点击右上角即可分享
微信分享提示