C# 네이버 리뷰 크롤링 예시 코드 (Selenium)

네이버 리뷰 크롤링을 만들어 봅시다.

네이버 리뷰 크롤링

'호떡'에 대한 리뷰를 추출해 보도록 하겠습니다. 나머지는 카페 같으므로 마지막에 있는 호떡으로 하겠습니다.

네이버 리뷰 크롤링

인터페이스는 리뷰 대상을 입력하고 버튼을 클릭하면 실행하도록 하였습니다. 텍스트박스 하나랑 버튼 하나로 충분해요.

네이버 리뷰 크롤링

리뷰를 보니, 괜찮은 맛집으로 보임...! (작성일자 기준)

부드럽고 쫀득쫀득하고^^
신선한옥수수라 건강해지는 기분입니다.

혈당관리하시는 분들에게도 좋다니
부모님 간식으로도 최고이구여~~☆
섬유질많아 변비로 고생하신다는 이웃분들과도 나누니
좋아해주셨어요!

소금만 조금넣고 삶으신다니
옥수수자체의 단맛만 느껴져서
아주 만족스럽구요^^

사장님과 직원분들도 친절하게 대해주셔서
동네에서 인기만점인 곳입니다.
늘 감사해요~~♡

일부러 옥수수 먹고플때 가요~ 올여름 이곳에서 많이 먹었어요^^ 매장도 넓고 깨끗해요.. 바로 바로 쪄서
신선한 맛이 나고 짜지도 달지도 않아 계속 먹어져요..
한번에 두개씩이나 먹네요 ㅜ 암튼 다른데서 파는 옥수수보다 맛있게 쪄주셔서 감사히 먹었고 옥수수 많이 파시고 다음 여름에도 잘 되면 좋겠어요~^^!!
잠실레이크팰리스 앞에 있어요~~

옥수수 너무 맛있어서 요즘 1일 1 한봉지 먹고 있어요.
정말 쫀득하고 진짜 맛있어요~^^
간이 또 너무 잘 맞춰져 있고 무엇보다 사장님이 너무 친절하시고 늘 밝은 미소로 인사해 주시는데 기분도 좋아져요~^^

언제 가도 사장님이 너무 친절하시고 서비스도 주시고 옥수수 맛 너무 좋아요~!! 옥수수 정말 좋아하는데 동네에서 오며가며 자주 사먹습니다 많이 파세요~~:)

강원도에서 서울로 올라온 귀한 찰옥수수에요. 맛나요.

자주 방문하는 강원도 찰옥수수
넘 쫄깃하고 맛있어요

여기는 맛있는 옥수수를 제일 먹기좋게 삶아서 파시네요
다른곳 옥수수보다 살짝 덜달게 해서 먹기가 너무 좋아요!!!

친절하셨어요 옥수수도 맛있어요!! 번창하세요

사장님 친절하시고 진짜 너무 맛있어요~~~

옥수수 간이 딱 맞아요
넘 맛있었어요

옥수수가 맛있어요~~

굿

맛있어요!

3개 5천원

굿
네이버 리뷰 크롤링

예시 코드, Selenium을 사용하였기에 using에 추가해 주세요.

using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Support.UI;
using SeleniumExtras.WaitHelpers;
using System;
using System.IO;
using System.Linq;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;

리뷰는 '페이지' 형식이 아니라 '더보기' 기능을 제공하고 있기에, '리뷰 읽기' => '더보기 클릭' => '리뷰 읽기' => '더보기 클릭'을 지정한 횟수만큼 반복해 보았어요.

Init();
//
string item = GetType().Name;
Match match = Regex.Match(m_InBs, @"/(?<id>\d+)\?");
int cnt = 0;
int ind = 0;
string id = match.Groups["id"].Value;
string url = $"https://pcmap.place.naver.com/restaurant/{id}/review/visitor";
string end = "END";
//
int maxCnt = 10;
string reviewXPath = ".//*[@class='pui__xtsQN-']";
string itemXPath = ".//h1[@id='_header']";
string moreXPath = ".//*[@class='fvwqf']";
//
m_DriverBs = new ChromeDriver(m_DriverServiceBs, m_OptionsBs);
m_WaitBs = new WebDriverWait(m_DriverBs, new TimeSpan(0, 0, 5));
m_DriverBs.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(5);
m_DriverBs.Navigate().GoToUrl(url);

Thread.Sleep(1000);
await Task.Factory.StartNew(() =>
{
    var v000 = m_DriverBs.FindElements(By.XPath(itemXPath));
    foreach (var elm in v000)
    {
        item = elm.Text;
    }

    SetIntro(item);

    while (cnt++ < maxCnt)
    {
        try
        {
            var v101 = m_DriverBs.FindElements(By.XPath(reviewXPath)).Where((x, y) => ind <= y);
            foreach (var elm in v101)
            {
                ind++;
                m_OutBs += $"{Environment.NewLine}{Environment.NewLine}{elm.Text}";
            }
            
            if (m_DriverBs.FindElements(By.XPath(moreXPath)).Count > 0)
            {
                var v201 = m_WaitBs.Until(ExpectedConditions.ElementToBeClickable(By.XPath(moreXPath)));            
                m_DriverBs.ExecuteScript("arguments[0].click();", v201);
                Thread.Sleep(1000);
            }
            else
            {
                break;
            }
        }
        catch (Exception ex)
        {
            end = ex.Message;
            break;
        }
    }
});
댓글 쓰기
가져가실 때, 출처 표시 부탁드려요! 감사합니다. 💗