HTMLAgilityPack का उपयोग करने के लिए सबसे अच्छी बात है । आप पुनः प्राप्त पृष्ठ से तत्वों का चयन करने के लिए अपनी आवश्यकताओं के आधार पर फ़िज़लर या CSQuery का उपयोग भी कर सकते हैं । LINQ या रेगुकर एक्सप्रेशंस का उपयोग करना केवल प्रवण त्रुटि है, विशेष रूप से जब HTML को विकृत किया जा सकता है, बंद होने वाले टैग गायब हो सकते हैं, बाल तत्व आदि को नस्ट कर सकते हैं।
आपको पृष्ठ को एक HtmlDocument ऑब्जेक्ट में स्ट्रीम करने की आवश्यकता है और फिर अपने आवश्यक तत्व का चयन करें।
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();
[संपादित करें] वास्तव में, कि स्क्रैप। सबसे सरल विधि FizzlerEx का उपयोग करना है , एक अद्यतन jQuery / CSS3- चयनकर्ता मूल फ़िज़लर परियोजना का कार्यान्वयन।
कोड नमूना सीधे उनकी साइट से:
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;
}
मुझे नहीं लगता कि इससे कोई सरल हो सकता है।
Contains
कॉल "काफी अच्छा" हो सकता है।