简单爬虫设计(三)——确定需要处理的网页范围

前言

如果还没有阅读前序文章,可以移步到前面两篇:

简单爬虫设计(一)——基本模型

简单爬虫设计(二)——确定爬取的范围

基本概念

需要处理的网页范围,简称处理范围,确定了爬虫遍历的过程中,哪些网页需要保存并处理。
处理范围是爬虫的输入,是爬取任务的组成部分。

定义处理范围的数据项主要是网址特征和网页内部特征,具体如下。

  • 网址特征。
  • 网页的内部特征。
  • 最多要处理多少网页。

网址特征还是支持普通字符串特征和正则表达式。
网页内部特征仅包含简单的字符串特征,如果有其他需求,可以自行扩展。

举例说明

继续使用CoolShell网站举例。

  1. 要保存并处理的文章链接类似下面这个网址,https://coolshell.cn/articles/21649.html。从字符串角度,可以认为包含articles字符串的URL都是需要采集并处理的,也可以用正则表达式,形式可以是这样https://coolshell\.cn/articles/\d+\.html
  2. 保存的网页最大数量,可以设置为100,也可以不设置。
  3. 网页内部特征可以不设置,意味着只要满足链接特征的文章都保存下来。

代码示例

interface ProcessingScope {  //处理范围接口
    //是否包含某个网页
    boolean contains(Webpage webpage);
    //处理网页的数量最大值
    long maxToProcess();
}
    
public class ProcessingScopeImpl implements ProcessingScope {

    //包含特定字符串特征的URL才被解析
    private String urlPattern;

    //正则特征
    private String urlRegEx;

    //包含特定特征的页面才被解析,应该是数组
    private String pagePattern;

    //处理的网页数量最大值
    private long maxToProcess = -1;

    @Override
    public boolean contains(Webpage webpage) {
        try {
            URL url = new URL(webpage.getUrl());
            return contains(url) && containsPage(webpage.getHtml());
        } catch (MalformedURLException e) {
            e.printStackTrace();
            return false;
        }
    }
    //处理范围是否包含某个网址
    boolean contains(URL url) {
        UrlFilter urlFilter = new UrlFilter(urlPattern, urlRegEx);
        return urlFilter.isMatch(url);
    }
    //处理范围是否包含某个网页
    boolean containsPage(String html) {
        if (StringUtils.isEmpty(this.pagePattern)) {
            return true;
        }
        if (StringUtils.isEmpty(html)) {
            return false;
        }
        return html.contains(this.pagePattern);
    }

有了处理范围这个元素,就可以很容易判断一个网页是否需要保存并处理。


if (processingScope.contains(webpage)) {
    webpageRepository.add(webpage);
    //或者执行其他处理逻辑
    logger.info("Saved html {}", webpage.getUrl());
}

处理范围的建模就要结束了,这里只演示了比较基本的规则,根据实际需求,需要增加更多的限制条件,比如过滤掉一些不含图片的页面,或者过滤掉特定语种的页面。
无论是什么规则,都只是一些静态规则,这是普通爬虫的能力局限。随着深度学习技术的飞速发展,爬虫可以更加智能,不断从爬取数据的过程中学习,更加出色地完成任务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值