HtmlAgilityPack真是一把網抓利器,可以迅速地從網頁抓到想要的文本或數據,使用起來十分方便,引用時在NuGet安裝添加並在頭部引用using HtmlAgilityPack;即可。
針對網址直接使用Load方法:
HtmlWeb webc = new HtmlWeb(); HtmlDocument htmlDoc = webc.Load(@"https://doc。。。"); HtmlNodeCollection hc = htmlDoc.DocumentNode.SelectNodes("//td[contains(normalize-space(text()),'Investment Advisor:')]/../../../../preceding-sibling::div[position()<=3]");
如果需要讀取的html文檔是本地的,可以先獲取數據流,再使用LoadHtml方法:
FileStream fs = new FileStream(@"C:\Users\jlin10\Desktop\test.html", FileMode.OpenOrCreate, FileAccess.Read); StreamReader sr = new StreamReader(fs, Encoding.Default); string htmlstr = sr.ReadToEnd(); sr.Close(); fs.Close(); HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument(); htmlDoc.LoadHtml(htmlstr);
抓出來之后就可以對hc循環取innertext屬性得到結果,不過HtmlAgilityPack的selectnode(s)方法只支持xpath,不支持jsoup,所以要准確地抓出想要的東西就得看xpath寫得好不好了,這里推薦下使用xpath常用的兩個網址:
https://www.cnblogs.com/VseYoung/p/8686383.html
http://www.w3school.com.cn/xpath/xpath_functions.asp
上面代碼中使用的HTML文檔測試例子
