최근에 웹 데이터를 크롤링하거나 스크래핑하는 곳들이 많이 생기고 있다. 네트워크의 학습을 위한 목적도 있고, 개개인의 필요에 의한 것일 수도 있다. 실제로 웹 데이터를 가져오는 행위는 불법에 해당된다. 혼자 사용하는 경우라면 상관없지만 불특정 다수에 의한 수익을 위한 목적이라면 얘기가 달라질 수 있다. 이 점은 명심하자.
웹 데이터 가져오기
인터넷에 퍼져있는 웹 데이터를 가져오는 행위는 저작권 위배에 소지가 크다.
하지만, 많은 사람이 이런 류의 프로그램을 원하기도 한다.
자신이 원하는 데이터를 추출하고 가공하여 통계를 만드는 일을 하는 경우라면 더더욱 그렇다.
그렇기에 특정 웹사이트의 경우 api 나 rss 형태로 서비스를 제공한다.
불법적으로 퍼가지 말고 자신들의 합법적인 방법으로 제공하는 데이터를 사용하라는 것이다.
웹 스크래핑, 크롤링
웹의 정보와 데이터를 그대로 가져오는 것을 웹 스크래핑 또는 웹 크롤링이라고 한다.
보편적으로 크롤링이라 부른다.
프로그램을 조금 심도있게 공부한 사람들은 네트워크 부분에서 이런 부분을 봤을 것이다.
웹사이트를 분석하고 특정한 데이터를 추출하여 가공하여 마케팅이나 자신이 찾고자 하는 데이터를 얻는데 목적이 있다.
하지만, 이 부분은 저작권에 대해 엄중하다.
uwp 에서 웹데이터 크롤링하기
가져올 타겟 URL 은 공개하지 않으려 한다. 테스트는 본인이 원하는 곳으로 하길 바란다.
uwp xaml 에 TextBox 를 하나 추가하고 uwp 비하인드 코드에 GetWebData() 메서드를 만들어 주었다.
TextBox 의 역할은 크롤링한 웹데이터를 문자열로 보여주기 위함이다.
GetWebData() 메서드는 웹데이트를 크롤링하여 TextBox 에 설정하는 부분이다.
<!-- uwp xaml -->
<TextBox x:Name="tb"
TextWrapping="Wrap"
MaxHeight="150" Width="300" Header="컨텐츠내용"
ScrollViewer.VerticalScrollBarVisibility="Auto"/>
/** uwp behind code C# */
private async void GetWebData()
{
String vContent = String.Empty;
var webView = new WebView();
using (SemaphoreSlim semaphoreSlim = new SemaphoreSlim(0, 1))
{
async void handler(WebView sender, WebViewNavigationCompletedEventArgs args)
{
vContent = await webView.InvokeScriptAsync("eval", new string[] { "document.body.outerHTML;" });
this.tb.Text = vContent;
webView.NavigationCompleted -= handler;
semaphoreSlim.Release();
}
webView.NavigationCompleted += handler;
webView.Navigate(new Uri("이곳에 웹데이터를 가져올 URL 주소를 기재한다."));
await semaphoreSlim.WaitAsync().ConfigureAwait(false);
}
}
코드 분석
위의 코드를 보면 비하인드 C# 코드에 생소한 부분들이 있을 것이다.
웹데이터를 정확하게 가져오기 위해 WebView 컨트롤을 코드상에서 만들어 사용한다.
WebView에 지정한 URL의 데이터를 온전히 나타내는데 시간이 걸리고, 로딩이 생긴다.
프로그램의 실행은 생각한 것만큼 보다도 상당히 빠르다.
WebView가 데이터를 처리할 대기할 시간이 필요하고, WebView가 완전히 처리될때까지 기다려 주어야 한다.
그렇기에 메서드는 비동기, 세마포를 이용하여 스레드를 처리하도록 하였다.
세마포 처리가 끝나면 이벤트를 메모리에서 해제하도록 하였다.
실행결과
웹데이터를 가져온 결과를 TextBox에 보여주고 있다.
정상적으로 가져왔다.
이 정보를 가지고 자신이 원하는 데이터를 추출하면 되는 것이다.
'programming > UWP' 카테고리의 다른 글
UWP 컴파일 오류 해결 방법 파일 시스템 유형 FAT32의 AppX 경로에 배포할 수 없습니다. (0) | 2022.08.03 |
---|---|
uwp html 파싱 웹데이터 추출 하는 방법 (0) | 2021.04.20 |
uwp Button 동적으로 추가하는 방법 (0) | 2021.04.17 |
uwp 텍스트박스 ( TextBox ) 텍스트블록 ( TextBlcok ) 사용하기 (0) | 2021.04.05 |
uwp 화면 레이아웃 StackPanel 사용하기 (0) | 2021.04.04 |
댓글