Hal terbaik untuk digunakan adalah HTMLAgilityPack . Anda juga dapat melihat penggunaan Fizzler atau CSQuery bergantung pada kebutuhan Anda untuk memilih elemen dari halaman yang diambil. Menggunakan LINQ atau Regukar Expressions hanya untuk rawan kesalahan, terutama ketika HTML dapat salah format, tag penutup tidak ada, memiliki elemen anak bersarang, dll.
Anda perlu mengalirkan halaman ke dalam objek HtmlDocument lalu memilih elemen yang diperlukan.
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] Sebenarnya, singkirkan itu. Metode paling sederhana adalah dengan menggunakan FizzlerEx , implementasi selektor jQuery / CSS3 yang diperbarui dari proyek Fizzler asli.
Contoh kode langsung dari situs mereka:
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;
}
Saya tidak berpikir itu bisa lebih sederhana dari itu.
Contains
Panggilan sederhana mungkin "cukup baik".