爬取HTML 某标签内容


最近不怎么忙,抽空了解了一下爬虫。零零散散的百度阅读相关资料,对爬虫有一点点小了解。做一下笔记。放个demo希望对感兴趣的小伙伴有抛砖引玉的作用。
按个人目前的理解,爬虫,就是对某个网页的HTML文件爬取某标签的内容,说白了就是获取目标网站的html,然后解析想获取标签,再取对应想要的值(可以是a标签的href可以是img的src,div的text等等属性值)
才学浅薄,如有不足之处请大佬指指点点

本案例以起点小说为例子(涉及知识仅供学习,不可瞎搞)

确定目标及分析:

第一步确定目标网站 https://read.qidian.com/chapter/ozgK2uJ6kuk1/_Ba1my_qLv_M5j8_3RRvhw2/

第二步确定自己想抓取的目标(这里抓取小说章节名称,可看出目标所在html结构为:j_chapterName下的span标签)

 

 

开撸:

1.先获取目标网站的html结构

 /// <summary>
        /// 获取目标HTML
        /// </summary>
        /// <param name="url"></param>
        /// <returns></returns>
        private async Task<string> GetHTML(string url)
        {
            var re = WebRequest.Create(url) as HttpWebRequest;
            re.Method = "GET";
            var headers = new WebHeaderCollection();
            headers.Add("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36");
            re.Headers = headers;
            re.AutomaticDecompression = DecompressionMethods.All;
            //  re.Timeout = 120;
            var ans = await re.GetResponseAsync();
            using (StreamReader sr = new StreamReader(ans.GetResponseStream()))
            {
                return sr.ReadToEnd();
            }
        }

2.解析html 通过QuerySelectorAll筛选出目标标签对象

  

 /// <summary>
        /// 解析获取目标对象list(如获取div 里面classA里面所有的span标签对象)
        /// </summary>
        /// <param name="html">解析目标</param>
        /// <param name="className">要获取的选择器地址如:div .classA span </param>
        /// <returns></returns>
        private static List<IElement> GetHtmlTag(string html, string className)
        {
            List<IElement> TagList = new List<IElement>();
            //解析
            var parser = new HtmlParser();
            var text = parser.ParseDocument(html);
            foreach (var item in text.QuerySelectorAll(className))
            {
                TagList.Add(item);
            }
            return TagList;
        }

3.根据标签对象获取对应属性值

 var titlelist = GetHtmlTag(html.Result, classTitle);
 title = titlelist[0].TextContent;//这里标题只取一个 我们取第一个对象即可,如遇到取得不是目标值可调试查看对象对应属性值

4.这样就取到了章节名称了
看看最终效果图

 

 

 



demo

链接:https://pan.baidu.com/s/1v2Tbm-Q28qo3QJZkilb11w
提取码:1234

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM