3. 爬虫框架Clawler 爬取优酷电影名

简介: 之前我们都是使用HtmlAgilityPack类库来进行页面的爬取,今天我们使用一个爬虫框架。框架名称:Clawler 参考地址框架设计由于我是参考的webmagic,所以整体架构上没有什么大的变化,设计图如下(图片是直接从webmagic上拿的...

之前我们都是使用HtmlAgilityPack类库来进行页面的爬取,今天我们使用一个爬虫框架。
框架名称:Clawler 参考地址

框架设计

由于我是参考的webmagic,所以整体架构上没有什么大的变化,设计图如下(图片是直接从webmagic上拿的)

img_a0204c24bfd0da5cdda01df77509de8a.jpe
设计图
  • Scheduler:负责URL的调度、去重,可以实现如Queue, PriorityQueueScheduler, RedisScheduler(可用于分布式)等等
  • Downloader: 负责下载HTML,可以实现如HttpDownloader, 浏览器的Downloader(WebDriver), FiddlerDownloader,本地文件Downloader等等
  • PageProcesser: 负责HTML解析、目标URL的选择
  • Pipeline: 负责数据的存储, 已实现文件存储, MySql存储, MySqlFile存储(脚本),MSSQL存储,MongoDb存储, 更多存储期待您的贡献

优点

  • 可以使用Json定义爬虫
  • 可以使用实体类+Attrbiute定义爬虫
  • 自动创建数据库、数据表
  • 支持 .NET CORE,可以跨平台
  • 支持ADSL拨号换IP:如果所有爬虫统一部署, 可以实现单台机器同时运行多个任务拨号互不影响、或者一个路由下面多个电脑下多个任务拨号互不影响
  • 支持自定义代理池
  • 有管理平台

一、框架使用

我们通过HtmlAgilityPack 爬取优酷电影名的例子进行说明。
当前例子是很简单的单页面的爬取, 只爬取页面上的几个固定位置的参数内容。
我们首先来说明一下,爬虫框架的使用。框架因为定义好了四个操作流程,所以编码人员在实际过程中只要大概了解框架的使用原理即可上手操作。
用户的一般使用,采用最基本的方式。只要关心俩个类,一个是当前PageProcesser 页面的处理逻辑,一个是Pipeline爬取的数据的存储。
通过分析,我们发现一般的爬虫程序大部分内容无非也就是在梳理这俩个东西。
在框架中我们不需要关心网页的调度内容,只需要关心我们需要爬取什么内容(爬取的逻辑)和数据的存储(管道)。
放代码如下:

首先是当前页面的解析类

    public class YoukuPageProcessor : BasePageProcessor
    {
        protected override void Handle(Page page)
        {
            // 利用 Selectable 查询并构造自己想要的数据对象
            var totalVideoElement = page.Selectable.Select(Selectors.XPath("//*[@id='total_videonum']"));
            var id = totalVideoElement.XPath("@id").GetValue();
            string videoNum = totalVideoElement.GetValue();

            var linqNodes = page.Selectable.Select(Selectors.XPath("//*[@id='filterPanel']/div[2]/ul")).XPath("li").Nodes();
            var videoCountry = new List<string>();
            foreach (var node in linqNodes)
            {
                string text = node.GetValue(ValueOption.InnerText);
                videoCountry.Add(text);
                //Console.WriteLine($"{text}");
            }

            var results = new YouKu()
            {
                id = id,
                videoNum = Convert.ToInt32(videoNum),
                videoCountry = videoCountry
            };

            // 以自定义KEY存入page对象中供Pipeline调用
            page.AddResultItem("VideoResult", results);

        }
    }

然后是当前页面的输出类

    /// <summary>
    /// 优酷爬虫管道
    /// </summary>
    public class YoukuPipeline : BasePipeline
    {
        public override void Process(IEnumerable<ResultItems> resultItems, ISpider spider)
        {
            ResultItems result = resultItems.First();
            StringBuilder builder = new StringBuilder();

            YouKu entry = result.Results["VideoResult"];
            builder.Append($"输出 [YouKu {entry.id}] {entry.videoNum}");
            Console.WriteLine(builder.ToString());

            // Other actions like save data to DB. 可以自由实现插入数据库或保存到文件
        }
    }

最后整合爬虫任务

     /// <summary>
       /// 定义处理器和管道
       /// </summary>
       public static void CustmizeProcessorAndPipeline()
       {
           // 定义采集的 Site 对象, 设置 Header、Cookie、代理等
           var site = new Site();
           //  添加初始采集链接
           site.AddStartUrl($"http://list.youku.com/category/show/c_96_s_1_d_1_p_1.html");

           Spider spider = Spider.Create(site,
                   // 使用内存调度
                   new QueueDuplicateRemovedScheduler(),
                   // 为优酷自定义的 Processor
                   new YoukuPageProcessor())
               // 为优酷自定义的 Pipeline
               .AddPipeline(new YoukuPipeline());

           spider.Downloader = new HttpClientDownloader();
           spider.ThreadNum = 1;
           spider.EmptySleepTime = 3000;

           // 启动爬虫
           spider.Run();
       }
目录
相关文章
|
1月前
|
数据采集 存储 JSON
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第27天】本文介绍了Python网络爬虫Scrapy框架的实战应用与技巧。首先讲解了如何创建Scrapy项目、定义爬虫、处理JSON响应、设置User-Agent和代理,以及存储爬取的数据。通过具体示例,帮助读者掌握Scrapy的核心功能和使用方法,提升数据采集效率。
105 6
|
2月前
|
数据采集 中间件 开发者
Scrapy爬虫框架-自定义中间件
Scrapy爬虫框架-自定义中间件
58 1
|
2月前
|
数据采集 中间件 Python
Scrapy爬虫框架-通过Cookies模拟自动登录
Scrapy爬虫框架-通过Cookies模拟自动登录
109 0
|
4月前
|
搜索推荐 前端开发 数据可视化
【优秀python web毕设案例】基于协同过滤算法的酒店推荐系统,django框架+bootstrap前端+echarts可视化,有后台有爬虫
本文介绍了一个基于Django框架、协同过滤算法、ECharts数据可视化以及Bootstrap前端技术的酒店推荐系统,该系统通过用户行为分析和推荐算法优化,提供个性化的酒店推荐和直观的数据展示,以提升用户体验。
172 1
【优秀python web毕设案例】基于协同过滤算法的酒店推荐系统,django框架+bootstrap前端+echarts可视化,有后台有爬虫
|
4月前
|
机器学习/深度学习 数据采集 数据可视化
基于爬虫和机器学习的招聘数据分析与可视化系统,python django框架,前端bootstrap,机器学习有八种带有可视化大屏和后台
本文介绍了一个基于Python Django框架和Bootstrap前端技术,集成了机器学习算法和数据可视化的招聘数据分析与可视化系统,该系统通过爬虫技术获取职位信息,并使用多种机器学习模型进行薪资预测、职位匹配和趋势分析,提供了一个直观的可视化大屏和后台管理系统,以优化招聘策略并提升决策质量。
215 4
|
1月前
|
数据采集 前端开发 中间件
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第26天】Python是一种强大的编程语言,在数据抓取和网络爬虫领域应用广泛。Scrapy作为高效灵活的爬虫框架,为开发者提供了强大的工具集。本文通过实战案例,详细解析Scrapy框架的应用与技巧,并附上示例代码。文章介绍了Scrapy的基本概念、创建项目、编写简单爬虫、高级特性和技巧等内容。
77 4
|
2月前
|
数据采集 中间件 数据挖掘
Scrapy 爬虫框架(一)
Scrapy 爬虫框架(一)
54 0
|
2月前
|
数据采集 XML 前端开发
Scrapy 爬虫框架(二)
Scrapy 爬虫框架(二)
50 0
|
4月前
|
数据采集 中间件 调度
Scrapy 爬虫框架的基本使用
Scrapy 爬虫框架的基本使用
|
4月前
|
数据采集 存储 中间件
Python进行网络爬虫:Scrapy框架的实践
【8月更文挑战第17天】网络爬虫是自动化程序,用于从互联网收集信息。Python凭借其丰富的库和框架成为构建爬虫的首选语言。Scrapy作为一款流行的开源框架,简化了爬虫开发过程。本文介绍如何使用Python和Scrapy构建简单爬虫:首先安装Scrapy,接着创建新项目并定义爬虫,指定起始URL和解析逻辑。运行爬虫可将数据保存为JSON文件或存储到数据库。此外,Scrapy支持高级功能如中间件定制、分布式爬取、动态页面渲染等。在实践中需遵循最佳规范,如尊重robots.txt协议、合理设置爬取速度等。通过本文,读者将掌握Scrapy基础并了解如何高效地进行网络数据采集。
237 6
下一篇
DataWorks