C#采用vony.Html.AIO插件批量爬MM网站图片

一、创建项目

  1.创建一个.netframework的控制台项目命名为Crawler

2.安装nuget包搜索名称Ivony.Html.AIO,使用该类库什么方便类似jqury的选择器可以根据类名或者元素类型来匹配元素,无需要写正则表达式。

3.创建一个图片类Image

一、抓取页面图片

1.拿到所有图片页面的地址

本次爬取的网站为https://www.mntup.com/,打开页面进入二级目录https://www.mntup.com/SiWa.html,并查页面看源代码,如下图:

图片页都在class=“dana”的div下面,我们要拿去div中超链接的href,如下格式:

<div class="dana"><a href=/Rosimm/liantiyimeizi_4f4d781d.html title=[Rosi写真]NO.2637_红色吊带高叉连体衣妹子床上狗爬式秀浑圆翘臀撩人诱惑写真38P target=_blank>
[Rosi写真]NO.2637_红色吊带高叉连体衣妹子床上狗爬式秀浑圆翘臀撩人诱惑写真38P <b> <font color=ff0000>2019-02-26</b></font>
</a></div>

首先考虑要拿到所有图片页面的超链接,c#代码下:

//需要定义一个list用来存放所有的页面链接 
static List<string> categoryUrl = new List<string>();

//加载url到文档
  IHtmlDocument source = new JumonyParser().LoadDocument("https://www.mntup.com/XiuRen.html", System.Text.Encoding.GetEncoding("utf-8"));
     
            //获取所有class=dana的的a标签
            var divLinks = source.Find(".dana a");
            foreach (var aLink in divLinks)
            {
                var categoryName = aLink.Attribute("href").Value(); //获取a中的链接
                categoryUrl.Add(categoryName);
            }

  

 2.打开图片页,发现是带有分页的,那就要获取所有的分页的链接了。分页的地址都在页面当中,所以我们直接匹配就好。

由于每个图片页都有分页地址,所以直接匹配分页地址,C#代码如下:

   
foreach (var url in categoryUrl)
            {
               //获取图片也的的文档
                IHtmlDocument html = new JumonyParser().LoadDocument($"{address}{url}", System.Text.Encoding.GetEncoding("utf-8"));

                //获取每个分页面并下载
                var pageLink = html.Find(".page a");
                foreach (var alingk in pageLink)
                {
                    string href = alingk.Attribute("href").Value();
                    Console.WriteLine($"获取分页地址{href}");

                }
            }

 3.所有分页都获取到了,接下来就是要获取页面中的每张图片了,打开页面查看源代码:

观察发现,所有的图片都在class=img的div下面,那就可以从每个分页中直接下载所有的图片了,代码如下:

  
//获取每一个分页的文档模型
 IHtmlDocument htm2 = new JumonyParser().LoadDocument($"{address}{href}", System.Text.Encoding.GetEncoding("utf-8"));

                    //获取class=img的div下的img标签
                    var aLink = htm2.Find(".img img");

                    foreach (var link in aLink)
                    {
                        var imgsrc = link.Attribute("src").Value();
                        Console.WriteLine("获取到图片路径" + imgsrc);
                        Console.WriteLine($"开始下载图片{imgsrc}>>>>>>>");
                        DownLoadImg(new Image { Address = address + imgsrc, Title = url });
                        
                    }
                }

 图片下载方法如下,为防止下载的时候阻塞主进程,下载采用异步:

 

        /// <summary>
        /// 异不下载图片
        /// </summary>
        /// <param name="image"></param>
        async static void DownLoadImg(Image image)
        {
            using (WebClient client = new WebClient())
            {
                try
                {
                    int start = image.Address.LastIndexOf("/") + 1;
    
                    string fileName = image.Address.Substring(start, image.Address.Length - start);
                  //图片目录采用页面地址作为文件名
                    string directory = "c:/images/" + image.Title.Replace("/", "-").Replace("html", "") + "/";                
                    if (!Directory.Exists(directory))
                    {
                        Directory.CreateDirectory(directory);
                    }
                    await client.DownloadFileTaskAsync(new Uri(image.Address), directory + fileName);
                }
                catch (Exception)
                {
                    Console.WriteLine($"{image.Address}下载失败");
                    File.AppendText(@"c:/log.txt");
                }
                Console.WriteLine($"{image.Address}下载成功");
            }

        }    

  

三、抓取图片

由于编码格式的问题,无法获取到中文标题,所有就采取了页面链接作为目录名称,下面是一张我抓取图片的截图:

 

最后的战果:

最后奉上代码如下:https://github.com/peijianmin/MyCrawler.git

 

转载于:https://www.cnblogs.com/taxue/p/10504874.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为达到最佳效果,推荐使用九网互联的ASP空间,支持绑定域名到目录。登录后台:/admin管理员:admin密码:admin请看一看,对你也有帮助的!注意下我们的联系方式,你也许会获得更多更快的信息和资源!MM321最流行的动漫程序 (带采集,生成HTML,2月1日的所有数据和图片) V3.0★★★3.0版本带有2月1日的所有数据和图片,本程序超越“马克思程序的动态播放页才能评论” ,超越传统单调的电影首页风格★★★提示:最好放在根目录,还有就是目录的Users的写入权限要开,还有你的IIS设置默认文档为index.html★★★这次版本作出以下修改:A.更换新的评论功能,使得界面之间更加搭配B.修正采集MM动漫网,更新时间不变C.优化友情链接的位置排列D.修正动态播放页的小部分错误链接E.后台广告位管理,增加html转换JS功能F.增加播放页联系方式JS以及JS管理G.内容页也增加了评论功能★★★★★★希望能给http://www.mm321.net做上一个友情链接,谢谢★★★★★★采集每天原站更新了就会开放:请加入QQ群:44507143,将会有更多的有用信息和资源,让你的网站越做越好!MM动漫网3.0程序发布(http://www.mm321.net)带有原站所有的数据和图片结合了当前网络上最流行的FLV程序,B2B程序还有QVOD,提供的助手只方便手动的添加,时间久了一样会厌倦,那么本程序添加了采集MM动漫网的数据功能,非常完美,图片是保存到你自己空间的,请大家检查下自己空间是否够用哦。★★★采集功能描述:(★★★需要注意千万不要改变现在的分类,会有影响采集★★★新增分类没任何影响)A.可检查今日是否更新并采集B.可输入天数,采集前几天至今的数据,只能输入大于等于0的整数C.可按照http://www.mm321.net的ID来采集,如果你想采集单个,那么你就开始ID和结束ID相同就行;这个ID范围没限制★★★数据都是精心挑选的,而且动漫是最全面,最热门,最流行的!一般下载后,改改LOGO和站名就能用了,绝对不存在任何****和Bug,请放心使用祝大家使用愉快,提前祝大家新年快乐!★★★官方网址:http://www.mm321.net,有时间可以上官方网看看,欢迎加入MM动漫程序QQ③群:44507143,MM动漫程序QQ②群:44507126,MM动漫程序QQ①群:44533243(已满) 支持我们,请介绍给你们的亲戚朋友,感谢,我们的论坛地址:http://cc.hx33.net,若有动漫介绍和问题,可以发个帖或者群里提问,恕不单人辅导!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值