dotNetSpider 手记

准备工作:

  从github上download工程。

  安装VS2017。

  安装 .net core 2.0。

  编译通过。

 

基础架构:

  调度器 Scheduler 从根site开始,向 Downloader 分配请求任务。

  Downloader 根据分配到的请求任务,向目标site 下载 page,并交由 PageProcessor 进行页面处理。

  PageProcessor 将处理的结果推入 Pipeline,将解析出的新的链接,推入 Scheduler。

  循环直至 Scheduler 没有新的请求可以处理。

 

Spider.Create:

  设定根访问节点、唯一身份标识、请求调度器 Scheduler,页面处理器 PageProcessor。

  以给出的 Sample 样例中,遍历 cnblog 站点为例进行解析:

    Scheduler 是 QueueDuplicateRemovedScheduler。就是一个存放 Request 的队列。

    PageProcessor 是默认的 DefaultPageProcessor。

    这里涉及到 XPath 的知识,需要快速了解。

 

  XPath:XPath 使用路径表达式在 XML 文档中进行导航,选取 XML 文档中的节点或者节点集。

  主要知识点见:http://www.runoob.com/xpath/xpath-syntax.html

 

页面处理流程 BasePageProcessor.Process:

        public void Process(Page page)
        {
            bool isTarget = true;

            if (_targetUrlPatterns.Count > 0 && !_targetUrlPatterns.Contains(null))
            {
                foreach (var regex in _targetUrlPatterns)
                {
                    isTarget = regex.IsMatch(page.Url);
                    if (isTarget)
                    {
                        break;
                    }
                }
            }

            if (!isTarget)
            {
                return;
            }

            Handle(page);

            page.ResultItems.IsSkip = page.ResultItems.Results.Count == 0;

            if (!page.SkipExtractTargetUrls)
            {
                ExtractUrls(page);
            }
        }

 

  在 Sample 中,调用的是 DefaultPageProcessor 提供的 hanlde:

            page.AddResultItem("title", page.Selectable.XPath("//title").GetValue());
            page.AddResultItem("html", page.Content);

  默认的页面处理,是找出 “title” 元素,以及整个 html 内容。

  接着在下载好的页面内容中,查找更多的 url。

 

  由此可见,实现自定义爬虫的关键,则是定义对页面的处理得到结果,以及对结果的处理。

  

  

      

 

转载于:https://www.cnblogs.com/Daniel-Liang/p/7458528.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值