最近不怎么忙,抽空了解了一下爬虫。零零散散的百度阅读相关资料,对爬虫有一点点小了解。做一下笔记。放个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