사용하기 가장 좋은 것은 HTMLAgilityPack 입니다. 검색된 페이지에서 요소를 선택하기위한 필요에 따라 Fizzler 또는 CSQuery 를 사용할 수도 있습니다 . LINQ 또는 Regukar Expressions를 사용하면 오류가 발생하기 쉽습니다.
페이지를 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();
[편집] 사실, 스크랩. 가장 간단한 방법은 원래 Fizzler 프로젝트의 업데이트 된 jQuery / CSS3 선택기 구현 인 FizzlerEx 를 사용 하는 것입니다.
사이트에서 직접 코드 샘플 :
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
전화가 "충분히 좋다"고 할 수 있습니다.