用C#写个小程序爬取漫画

这是要爬的地址 https://www.iqiyi.com/manhua/detail_18yzlq8jc5.html,F12 查看网络发现他是通过 https://www.iqiyi.com/manhua/catalog/18yzlq8jc5/ 这个接口获取目录信息的。

在这里插入图片描述

在这里插入图片描述

这是第一话的地址 https://www.iqiyi.com/manhua/reader/18yzlq8jc5_18yzebufq1.html ,跟接口返回的数据对比发现前面的部分是固定的,后面的就是 comicId+"_"+episodeId+".html"。

下面通过C#代码获取漫画第一话的地址。

首先准备一个类方便解析json

在这里插入图片描述

class ResponseData
{
    public Data data { get; set; }
}
class Data
{
    public List<Episode> episodes { get; set; }
}
class Episode
{
    public string comicId { get; set; }
    public string episodeId { get; set; }
}
HttpClient client = new HttpClient();

var json = client.GetStringAsync("https://www.iqiyi.com/manhua/catalog/18yzlq8jc5/").Result;
var responseData = JsonConvert.DeserializeObject<ResponseData>(json);
responseData.data.episodes.ForEach(x =>
{
    Console.WriteLine($"https://www.iqiyi.com/manhua/reader/{x.comicId}_{x.episodeId}.html");
});

在这里插入图片描述

这样每一话的地址就显示出来了,最后vb.net教程把每话里的图片保存起来就行了。打开第一话,发现图片地址不是从接口返回c#教程的,而是直接写在html里的

在这里插入图片描述

在浏览器开发者工具中选中一个图片标签,选择复制 XPath,会得到 /html/body/div[3]/ul/li[1]/img

在这里插入图片描述

再把后面的 li[1] 改成 li,然后搜索,就把html中所有的img标签都找到了

在这里插入图片描述

下面用C#完成上面的操作,首先需要装一个第三方库。

在这里插入图片描述

long i = 1;
responseData.data.episodes.ForEach(x =>
{
    var url = $"https://www.iqiyi.com/manhua/reader/{x.comicId}_{x.episodeId}.html";
    var html = client.GetStringAsync(url).Result;
    var document = new HtmlDocument();
    document.LoadHtml(html);
    //XPath的含义是html下的body下的第二(三)个div下的ul下的。。。
    //注意这里如果用/html/body/div[3]/ul/li/img会返回null,使用/html/body/div[2]/ul/li/img才能正常返回,是因为从浏览器开发者工具看的html代码是经过浏览器渲染后的,有时候页面结构跟源码会不一样,遇到这种就要直接去源码中去查看
    var nodes = document.DocumentNode.SelectNodes("/html/body/div[2]/ul/li/img");
    nodes.ToList().ForEach(n =>
    {
        //查看源码发现只有前三个图片的地址在src属性里,后面的都是在data-original属性里,所以要分两种情况去获取图片地址
        string imgUrl = "";
        if (n.Attributes["src"] != null)
        {
            imgUrl = n.Attributes["src"].Value;
        }
        else
        {
            imgUrl = n.Attributes["data-original"].Value;
        }
        if (imgUrl != null)
        {
            var stream = client.GetStreamAsync(imgUrl).Result;
            //这里要添加System.Drawing引用
            var image = System.Drawing.Image.FromStream(stream);
            if (!Directory.Exists("D:\\海贼王\\"))
            {
                Directory.CreateDirectory("D:\\海贼王\\");
            }
            image.Save("D:\\海贼王\\" + i + ".jpg");
            i++;

        }
    });
});

大功告成!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值