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