最近不怎么忙,抽空了解了一下爬蟲。零零散散的百度閱讀相關資料,對爬蟲有一點點小了解。做一下筆記。放個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