HTML Agility 팩 사용 방법
HTML Agility Pack 사용방법
XHTML 문서가 완전히 유효하지 않습니다.그래서 쓰고 싶었어요.프로젝트에서는 어떻게 사용합니까?제 프로젝트는 C#에 있습니다.
먼저 HTMLAgilityPack nuget 패키지를 프로젝트에 설치합니다.
다음으로 예를 들어 다음과 같습니다.
HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument();
// There are various options, set as needed
htmlDoc.OptionFixNestedTags=true;
// filePath is a path to a file containing the html
htmlDoc.Load(filePath);
// Use: htmlDoc.LoadHtml(xmlString); to load from a string (was htmlDoc.LoadXML(xmlString)
// ParseErrors is an ArrayList containing any errors from the Load statement
if (htmlDoc.ParseErrors != null && htmlDoc.ParseErrors.Count() > 0)
{
// Handle any parse errors as required
}
else
{
if (htmlDoc.DocumentNode != null)
{
HtmlAgilityPack.HtmlNode bodyNode = htmlDoc.DocumentNode.SelectSingleNode("//body");
if (bodyNode != null)
{
// Do something with bodyNode
}
}
}
(NB: 이 코드는 예시일 뿐이며 반드시 최선의/유일한 접근방식은 아닙니다.자신의 어플리케이션에서 맹목적으로 사용하지 마십시오.)
그HtmlDocument.Load()
method는 스트림도 받아들입니다.이것은 에 있는 다른 스트림 지향 클래스와의 통합에 매우 도움이 됩니다.NET 프레임워크하는 동안에HtmlEntity.DeEntitize()
는 html 엔티티를 올바르게 처리하기 위한 또 하나의 유용한 방법입니다.(고마워 매튜)
HtmlDocument
그리고.HtmlNode
가장 많이 사용하는 수업입니다.XML 파서와 마찬가지로 XPath 식을 받아들이는 selectSingleNode 및 selectNodes 메서드를 제공합니다.
에 주의해 주세요.HtmlDocument.Option??????
부울 속성.이러한 기능에 의해,Load
그리고.LoadXML
메소드는 HTML/XHTML을 처리합니다.
또한 HtmlAgilityPack.chm이라는 컴파일된 도움말 파일도 있으며 각 개체에 대한 완전한 참조가 포함되어 있습니다.이것은 보통 솔루션의 기본 폴더에 있습니다.
이것이 당신에게 도움이 될지는 모르겠지만, 기본적인 내용을 소개하는 기사를 몇 편 썼습니다.
- Html Agility Pack 기사 시리즈
- Html Agility Pack 라이브러리 개요
- Html Agility Pack을 사용하여 html 일부에서 링크를 쉽게 추출할 수 있습니다.
다음 기사는 95% 완성입니다.제가 작성한 코드의 마지막 몇 부분에 대한 설명만 작성하면 됩니다.관심이 있으시다면 게시할 때 잊지 말고 여기에 올리도록 하겠습니다.
HtmlAgilityPack은 XPath 구문을 사용하고 있으며, 많은 사람들이 이 구문이 제대로 문서화되어 있지 않다고 주장하지만, 저는 이 XPath 문서의 도움을 받아 이 구문을 사용하는 데 어려움이 없었습니다.
해석하다
<h2>
<a href="">Jack</a>
</h2>
<ul>
<li class="tel">
<a href="">81 75 53 60</a>
</li>
</ul>
<h2>
<a href="">Roy</a>
</h2>
<ul>
<li class="tel">
<a href="">44 52 16 87</a>
</li>
</ul>
나는 이렇게 했다:
string url = "http://website.com";
var Webget = new HtmlWeb();
var doc = Webget.Load(url);
foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//h2//a"))
{
names.Add(node.ChildNodes[0].InnerHtml);
}
foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//li[@class='tel']//a"))
{
phones.Add(node.ChildNodes[0].InnerHtml);
}
HTMLAgilityPack 관련 주요 코드는 다음과 같습니다.
using System;
using System.Net;
using System.Web;
using System.Web.Services;
using System.Web.Script.Services;
using System.Text.RegularExpressions;
using HtmlAgilityPack;
namespace GetMetaData
{
/// <summary>
/// Summary description for MetaDataWebService
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
[System.Web.Script.Services.ScriptService]
public class MetaDataWebService: System.Web.Services.WebService
{
[WebMethod]
[ScriptMethod(UseHttpGet = false)]
public MetaData GetMetaData(string url)
{
MetaData objMetaData = new MetaData();
//Get Title
WebClient client = new WebClient();
string sourceUrl = client.DownloadString(url);
objMetaData.PageTitle = Regex.Match(sourceUrl, @
"\<title\b[^>]*\>\s*(?<Title>[\s\S]*?)\</title\>", RegexOptions.IgnoreCase).Groups["Title"].Value;
//Method to get Meta Tags
objMetaData.MetaDescription = GetMetaDescription(url);
return objMetaData;
}
private string GetMetaDescription(string url)
{
string description = string.Empty;
//Get Meta Tags
var webGet = new HtmlWeb();
var document = webGet.Load(url);
var metaTags = document.DocumentNode.SelectNodes("//meta");
if (metaTags != null)
{
foreach(var tag in metaTags)
{
if (tag.Attributes["name"] != null && tag.Attributes["content"] != null && tag.Attributes["name"].Value.ToLower() == "description")
{
description = tag.Attributes["content"].Value;
}
}
}
else
{
description = string.Empty;
}
return description;
}
}
}
public string HtmlAgi(string url, string key)
{
var Webget = new HtmlWeb();
var doc = Webget.Load(url);
HtmlNode ourNode = doc.DocumentNode.SelectSingleNode(string.Format("//meta[@name='{0}']", key));
if (ourNode != null)
{
return ourNode.GetAttributeValue("content", "");
}
else
{
return "not fount";
}
}
시작하기 - HTML Agility Pack
// From File
var doc = new HtmlDocument();
doc.Load(filePath);
// From String
var doc = new HtmlDocument();
doc.LoadHtml(html);
// From Web
var url = "http://html-agility-pack.net/";
var web = new HtmlWeb();
var doc = web.Load(url);
이거 먹어봐
string htmlBody = ParseHmlBody(dtViewDetails.Rows[0]["Body"].ToString());
private string ParseHmlBody(string html)
{
string body = string.Empty;
try
{
var htmlDoc = new HtmlDocument();
htmlDoc.LoadHtml(html);
var htmlBody = htmlDoc.DocumentNode.SelectSingleNode("//body");
body = htmlBody.OuterHtml;
}
catch (Exception ex)
{
dalPendingOrders.LogMessage("Error in ParseHmlBody" + ex.Message);
}
return body;
}
언급URL : https://stackoverflow.com/questions/846994/how-to-use-html-agility-pack
'programing' 카테고리의 다른 글
데이터 손실 없이 SQL Server 데이터베이스의 열 데이터 유형을 변경하는 방법 (0) | 2023.04.08 |
---|---|
명령 프롬프트에서 PowerShell 스크립트로 부울 값을 전달하는 방법 (0) | 2023.04.08 |
PowerShell에서 여러 파라미터를 하나의 함수로 전달하려면 어떻게 해야 합니까? (0) | 2023.04.08 |
nvarchar(최대)와 NText (0) | 2023.04.08 |
XHTML 자체 포함 태그를 제외한 열려 있는 태그와 RegEx 일치 (0) | 2023.04.08 |