Điều tốt nhất để sử dụng là HTMLAgilityPack . Bạn cũng có thể xem xét sử dụng Fizzler hoặc CSQuery tùy thuộc vào nhu cầu của bạn để chọn các phần tử từ trang được truy xuất. Sử dụng Biểu thức LINQ hoặc Regukar dễ xảy ra lỗi, đặc biệt khi HTML có thể bị sai định dạng, thiếu thẻ đóng, có các phần tử con lồng nhau, v.v.
Bạn cần truyền trang vào một đối tượng HtmlDocument và sau đó chọn phần tử bạn yêu cầu.
var doc = new HtmlAgilityPack.HtmlDocument();
HtmlAgilityPack.HtmlNode.ElementsFlags["br"] = HtmlAgilityPack.HtmlElementFlag.Empty;
doc.OptionWriteEmptyNodes = true;
try
{
var webRequest = HttpWebRequest.Create(pageUrl);
Stream stream = webRequest.GetResponse().GetResponseStream();
doc.Load(stream);
stream.Close();
}
catch (System.UriFormatException uex)
{
Log.Fatal("There was an error in the format of the url: " + itemUrl, uex);
throw;
}
catch (System.Net.WebException wex)
{
Log.Fatal("There was an error connecting to the url: " + itemUrl, wex);
throw;
}
string testDivSelector = "//div[@id='test']";
var divString = doc.DocumentNode.SelectSingleNode(testDivSelector).InnerHtml.ToString();
[EDIT] Trên thực tế, bỏ qua. Phương pháp đơn giản nhất là sử dụng FizzlerEx , một triển khai jQuery / CSS3-selectors được cập nhật của dự án Fizzler ban đầu.
Mẫu mã trực tiếp từ trang web của họ:
using HtmlAgilityPack;
using Fizzler.Systems.HtmlAgilityPack;
var web = new HtmlWeb();
var document = web.Load("http://example.com/page.html");
var page = document.DocumentNode;
foreach(var item in page.QuerySelectorAll("div.item"))
{
var title = item.QuerySelector("h3:not(.share)").InnerText;
var date = DateTime.Parse(item.QuerySelector("span:eq(2)").InnerText);
var description = item.QuerySelector("span:has(b)").InnerHtml;
}
Tôi không nghĩ nó có thể trở nên đơn giản hơn thế.
Contains
cuộc gọi đơn giản có thể là "đủ tốt".