现在网上大把的Python的爬虫教程,很少看见有用C#写的,正好新出的.Net Core可以很方便的部署到Linux上,就用妹子图做示范写个小爬虫

在C#下有个很方便的类库 HtmlAgilityPack 可以用来分析网页

我们先新建一个.Net Core控制台项目MzituCrawler,在Nuget管理器添加HtmlAgilityPack的引用 Install-Package HtmlAgilityPack -Version 1.9.

我们打开妹子图的网页,点击下面的翻页按钮,发现每页的地址有个固定的格式 https://www.mzitu.com/page/页码/

我们先获取总共多少页

  1. var baseUrl = $"https://www.mzitu.com";
  2. HtmlWeb web = new HtmlWeb();
  3. var indexDoc = web.Load(baseUrl);
  4. var pageNode = indexDoc.DocumentNode.SelectNodes("/html/body/div[@class='main']/div[@class='main-content']/div[@class='postlist']/nav/div/a").Last(a => a.GetAttributeValue("class", string.Empty) == "page-numbers");
  5. var pageCount = int.Parse(pageNode.InnerText);

查看网页上链接的元素可以看到每个链接对应的xpath地址为 //*[@id='pins']/li/a

我们用HtmlAgilityPack获取第每一页的内容

  1. for (int pageIndex = ; pageIndex <= pageCount; pageIndex++)
  2. {
  3. var url = new Uri(new Uri(baseUrl), $"/page/{pageIndex}/").ToString();
  4. var doc = web.Load(url);
  5. var nodes = doc.DocumentNode.SelectNodes("//*[@id='pins']/li/a");
  6. if (nodes.Count > 0x0)
  7. {
  8. foreach (var node in nodes)
  9. {
  10. var title = node.SelectSingleNode("img").GetAttributeValue("alt", string.Empty);
  11. var href = node.GetAttributeValue("href", string.Empty);
  12. href = new Uri(new Uri(baseUrl), href).ToString();
  13. DownloadImages(downloadFolder: Path.Combine(baseFolder, title), url: href);
  14. }
  15. }
  16. else
  17. {
  18. return;
  19. }
  20. }

其中方法 DownloadImages 是下载对应链接里面图片的方法

  1. private static void DownloadImages(string downloadFolder, string url)
  2. {
  3. if (!Directory.Exists(downloadFolder))
  4. {
  5. Directory.CreateDirectory(downloadFolder);
  6. }
  7. HtmlWeb web = new HtmlWeb();
  8. var indexDoc = web.Load(url);
  9. var pageNode = indexDoc.DocumentNode.SelectNodes("/html/body/div[@class='main']/div[@class='content']/div[@class='pagenavi']/a").Reverse().Skip().First();
  10. var pageCount = pageNode == null ? : int.Parse(pageNode.InnerText);
  11. for (int pageIndex = ; pageIndex <= pageCount; pageIndex++)
  12. {
  13. var doc = web.Load($"{url}/{pageIndex}");
  14. var imageNode = doc.DocumentNode.SelectSingleNode("/html/body/div[2]/div[1]/div[3]/p/a/img");
  15. if (imageNode != null)
  16. {
  17. var imageUrl = imageNode.GetAttributeValue("src", string.Empty);
  18. imageUrl = new Uri(new Uri(url), imageUrl).ToString();
  19. if (historyUrl.Contains(imageUrl))
  20. {
  21. continue;
  22. }
  23. using (var client = new HttpClient())
  24. {
  25. client.DefaultRequestHeaders.Host = "i.meizitu.net";
  26. client.DefaultRequestHeaders.Pragma.ParseAdd("no-cache");
  27. client.DefaultRequestHeaders.AcceptEncoding.ParseAdd("gzip, deflate");
  28. client.DefaultRequestHeaders.AcceptLanguage.ParseAdd("zh-CN,zh;q=0.8,en;q=0.6");
  29. client.DefaultRequestHeaders.CacheControl = new System.Net.Http.Headers.CacheControlHeaderValue { NoCache = true };
  30. client.DefaultRequestHeaders.Connection.ParseAdd("keep-alive");
  31. client.DefaultRequestHeaders.Referrer = new Uri(url);
  32. client.DefaultRequestHeaders.UserAgent.ParseAdd("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36");
  33. client.DefaultRequestHeaders.Accept.ParseAdd("image/webp,image/apng,image/*,*/*;q=0.8");
  34. var buffer = client.GetByteArrayAsync(imageUrl).Result;
  35. var fileName = new Uri(imageUrl).Segments.Last();
  36. File.WriteAllBytes(Path.Combine(downloadFolder, fileName), buffer);
  37. }
  38. }
  39. }
  40. }

.Net Core爬虫爬取妹子网图片的更多相关文章

  1. 使用Python爬虫爬取网络美女图片

    代码地址如下:http://www.demodashi.com/demo/13500.html 准备工作 安装python3.6 略 安装requests库(用于请求静态页面) pip install ...

  2. Python爬虫爬取全书网小说,程序源码+程序详细分析

    Python爬虫爬取全书网小说教程 第一步:打开谷歌浏览器,搜索全书网,然后再点击你想下载的小说,进入图一页面后点击F12选择Network,如果没有内容按F5刷新一下 点击Network之后出现如下 ...

  3. Node.js爬虫-爬取慕课网课程信息

    第一次学习Node.js爬虫,所以这时一个简单的爬虫,Node.js的好处就是可以并发的执行 这个爬虫主要就是获取慕课网的课程信息,并把获得的信息存储到一个文件中,其中要用到cheerio库,它可以让 ...

  4. scrapy爬虫爬取小姐姐图片(不羞涩)

    这个爬虫主要学习scrapy的item Pipeline 是时候搬出这张图了: 当我们要使用item Pipeline的时候,要现在settings里面取消这几行的注释 我们可以自定义Item Pip ...

  5. python爬虫——爬取NUS-WIDE数据库图片

    实验室需要NUS-WIDE数据库中的原图,数据集的地址为http://lms.comp.nus.edu.sg/research/NUS-WIDE.htm   由于这个数据只给了每个图片的URL,所以需 ...

  6. python爬虫:爬取慕课网视频

    前段时间安装了一个慕课网app,发现不用注册就可以在线看其中的视频,就有了想爬取其中的视频,用来在电脑上学习.决定花两天时间用学了一段时间的python做一做.(我的新书<Python爬虫开发与 ...

  7. python爬虫爬取赶集网数据

    一.创建项目 scrapy startproject putu 二.创建spider文件 scrapy genspider  patubole patubole.com   三.利用chrome浏览器 ...

  8. 使用requests+BeaBeautiful Soup爬取妹子图图片

    1. Requests:让 HTTP 服务人类 Requests 继承了urllib2的所有特性.Requests支持HTTP连接保持和连接池,支持使用cookie保持会话,支持文件上传,支持自动确定 ...

  9. Python 爬虫: 抓取花瓣网图片

    接触Python也好长时间了,一直没什么机会使用,没有机会那就自己创造机会!呐,就先从爬虫开始吧,抓点美女图片下来. 废话不多说了,讲讲我是怎么做的. 1. 分析网站 想要下载图片,只要知道图片的地址 ...

随机推荐

  1. 网页设计和制作,数学,access 2010

    网页设计和制作 插入特殊字符:插入---字符---其他字符---选择字符---完成. 插入水平线:插入---字符---水平线---右键---选择第二个框---改变颜色---完成. 插入项目类表:选择要 ...

  2. Asp.Net MVC 5 Razor 视图 未将对象引用到实例

    未将对象引用到实例的错误居然指向了@{Leyout=“..此处略,核实路径无误”}. 最后发现原来是在一个<select .. name="@Model.Category"& ...

  3. schema中属性声明

    <attribute name="属性名"   default="默认值"  fixed="固定值" use="option ...

  4. maven课程 项目管理利器-maven 3-5 maven生命周期和插件 4星

    本节重点: maven插件的使用 本节主要内容: 1 maven生命周期 2 maven插件的使用 3 零散知识点 1 maven生命周期  maven生命周期主要有三个: a clean 清理项目 ...

  5. 深入理解java虚拟机阅读笔记(1)运行时数据区域

    java虚拟机所管理的内存区域主要分为方法区.堆:虚拟机栈.本地方法栈.程序计数器,如图: 1.程序计数器是当前线程所执行的字节码行号指示器,用以记录当前指令执行的位置.程序计数器是线程私有的,每个线 ...

  6. Linux yum apt-get 方式

    Linux 大致可以分两大类   RedHat分支 redhat, centos ,mandrake,mandriva,国产的红x等 1 常见的安装包格式 rpm包,安装rpm包的命令是“rpm -参 ...

  7. Linux,MD5

    Linux 中的 md5 利用 md5 消息摘要算法可以获取任何一件事物的唯一 ID 利用 md5 消息摘要算法可以判断任何一个事物是否被改变过 一致性验证:MD5的典型应用是对一段信息(Messag ...

  8. Xposed截获 Android手机QQ密码

    0x00 前言 Xposed框架是一款修改系统框架服务的软件,通过它许多功能强大的模块得以实现,且不冲突地同时运作,自从Xposed框架发布以来,安卓手机的可玩性日益激增,最近很闲很蛋疼,研究下截获A ...

  9. HUE安装与使用

    HUE安装与使用 1.介绍 HUE是一个开源的Apache Hadoop UI系统,早期由Cloudera开发,后来贡献给开源社区.它是基于Python Web框架Django实现的.通过使用Hue我 ...

  10. leetcode:查找

    1.  word ladder 题目: Given two words (start and end), and a dictionary, find the length of shortest t ...