웹 크롤링, 웹 수집 또는 데이터 스크래핑이라고도 하는 웹 스크래핑은 웹 사이트에서 데이터를 추출하는 데 사용됩니다. 웹 스크레이퍼는 웹 페이지에서 데이터를 추출하기 위해 CSS 선택기, XPath 또는 둘 다와 같은 다양한 데이터 선택기를 사용합니다. 이 두 선택기는 웹에서 정보를 수집하고 분석하는 데 효율적입니다. 이 기사에서는 C#에서 웹 스크레이퍼를 만드는 방법, 특히 HTML 탐색, XPath 쿼리 및 CSS 선택기에 대한 정보를 다룹니다.
C# 웹 스크래핑 라이브러리 구성
Aspose.HTML for .NET은 New Releases 섹션에서 참조 DLL 파일을 다운로드하거나 다음 NuGet 설치 명령을 실행하여 쉽게 구성할 수 있는 웹 스크래핑 라이브러리입니다. :
PM> Install-Package Aspose.Html
C#에서 HTML 탐색을 사용한 웹 스크래핑
Node 클래스의 다른 속성을 사용하여 HTML 문서를 탐색할 수 있습니다. 아래 코드 조각은 C#에서 HTML 웹 페이지를 탐색하는 방법을 설명합니다.
// HTML 코드 준비
var html_code = "<span>Hello</span> <span>World!</span>";
// 준비된 코드에서 문서 초기화
using (var document = new Aspose.Html.HTMLDocument(html_code, "."))
{
// BODY의 첫 번째 자식(첫 번째 SPAN)에 대한 참조 가져오기
var element = document.Body.FirstChild;
Console.WriteLine(element.TextContent); // output: Hello
// html 요소 사이의 공백에 대한 참조 가져오기
element = element.NextSibling;
Console.WriteLine(element.TextContent); // output: ' '
// 두 번째 SPAN 요소에 대한 참조 가져오기
element = element.NextSibling;
Console.WriteLine(element.TextContent); // output: World!
}
HTML 문서 및 해당 요소 검사
API는 또한 요소 순회 기능의 일반화된 사용을 제공합니다. 다음 코드 스니펫은 API의 다양한 요소에 대한 자세한 검사를 수행하는 방법을 보여줍니다.
//파일에서 문서 로드
string documentPath = System.IO.Path.Combine(DataDir, "html_file.html");
// 로컬 파일 시스템의 소스 HTML 파일 경로 지정
using (var document = new Aspose.Html.HTMLDocument(documentPath))
{
// 문서의 html 요소 가져오기
var element = document.DocumentElement;
Console.WriteLine(element.TagName); // HTML
// html 요소의 마지막 요소 가져오기
element = element.LastElementChild;
Console.WriteLine(element.TagName); // BODY
// body 요소의 첫 번째 요소 가져오기
element = element.FirstElementChild;
Console.WriteLine(element.TagName); // H1
Console.WriteLine(element.TextContent); // Header 1
}
C#의 웹 스크레이퍼에 대한 사용자 지정 필터 사용
사용자 정의 필터 구현과 함께 ITreeWalker 또는 INodeIterator 인터페이스 객체를 사용하여 사용자 정의 필터를 구현할 수 있습니다. 다음 코드 스니펫은 프로세스를 따르는 방법을 설명합니다.
class OnlyImageFilter : Aspose.Html.Dom.Traversal.Filters.NodeFilter
{
public override short AcceptNode(Aspose.Html.Dom.Node n)
{
// 현재 필터는 IMG 요소를 제외한 모든 요소를 건너뜁니다.
return string.Equals("img", n.LocalName)
? FILTER_ACCEPT
: FILTER_SKIP;
}
}
사용자 정의 필터를 구현한 후 다음 코드를 사용하여 웹 페이지를 빠르게 탐색할 수 있습니다.
var code = @"
<p>Hello</p>
<img src='image1.png'>
<img src='image2.png'>
<p>World!</p>";
// 준비된 코드를 기반으로 문서 초기화
using (var document = new Aspose.Html.HTMLDocument(code, "."))
{
// HTML 탐색을 시작하려면 TreeWalker의 인스턴스를 만들어야 합니다.
// 지정된 매개변수는 문서의 루트에서 걷기 시작하여 모든 노드를 반복하고 필터의 사용자 정의 구현을 사용함을 의미합니다.
using (var iterator = document.CreateTreeWalker(document, Aspose.Html.Dom.Traversal.Filters.NodeFilter.SHOW_ALL, new OnlyImageFilter()))
{
while (iterator.NextNode() != null)
{
// 자체 필터를 사용하고 있으므로 현재 노드는 항상 HTMLImageElement의 인스턴스가 됩니다.
// 따라서 여기에 추가 유효성 검사가 필요하지 않습니다.
var image = (Aspose.Html.HTMLImageElement)iterator.CurrentNode;
System.Console.WriteLine(image.Src);
// 출력: image1.png
// 출력: image2.png
}
}
}
C#에서 XPath 쿼리를 사용한 웹 스크래핑
XPath는 HTML 문서에서 데이터를 추출하는 데 사용할 수 있습니다. 다음 코드 조각은 C#에서 웹 스크래핑에 XPath 쿼리를 사용하는 방법을 자세히 설명합니다.
// HTML 코드 준비
var code = @"
<div class='happy'>
<div>
<span>Hello!</span>
</div>
</div>
<p class='happy'>
<span>World</span>
</p>
";
// 준비된 코드를 기반으로 문서 초기화
using (var document = new Aspose.Html.HTMLDocument(code, "."))
{
// 여기에서 'class' 속성이 'happy'와 동일한 요소에서 모든 하위 SPAN 요소를 선택하는 XPath 표현식을 평가합니다.
var result = document.Evaluate("//*[@class='happy']//span",
document,
null,
Aspose.Html.Dom.XPath.XPathResultType.Any,
null);
// 결과 노드에 대해 반복
for (Aspose.Html.Dom.Node node; (node = result.IterateNext()) != null;)
{
System.Console.WriteLine(node.TextContent);
// 출력: 안녕하세요
// 출력: 세계!
}
}
C#에서 CSS 선택기를 사용한 웹 스크래핑
CSS 선택기 구문을 기반으로 문서 트리의 요소와 일치하는 검색 패턴을 만들 수 있습니다. 아래 코드 스니펫은 C#에서 CSS 선택기를 사용하여 웹 스크래핑을 수행하는 방법을 설명합니다.
// HTML 코드 준비
var code = @"
<div class='happy'>
<div>
<span>Hello</span>
</div>
</div>
<p class='happy'>
<span>World!</span>
</p>
";
// 준비된 코드를 기반으로 문서 초기화
using (var document = new Aspose.Html.HTMLDocument(code, "."))
{
// 여기에서 'class' 속성이 'happy'와 같은 모든 요소와 해당 하위 SPAN 요소를 추출하는 CSS 선택기를 만듭니다.
var elements = document.QuerySelectorAll(".happy span");
// 결과 요소 목록을 반복합니다.
foreach (Aspose.Html.HTMLElement element in elements)
{
System.Console.WriteLine(element.InnerHTML);
// 출력: 안녕하세요
// 출력: 세계!
}
}
무료 라이선스 받기
API를 전체 용량으로 평가하려면 무료 임시 라이선스를 요청할 수 있습니다.
결론
이 기사에서는 C#에서 웹 스크레이퍼를 만드는 여러 방법을 포함하는 C# 웹 스크래핑 라이브러리인 Aspose.HTML for .NET에 대해 배웠습니다. HTML 탐색, XPath 쿼리 및 요구 사항을 달성하기 위한 CSS 선택기 방법에 대해 설명합니다. 그러나 우려 사항이나 질문에 대해 논의해야 하는 경우 포럼에 편지를 보내주십시오.