소셜 미디어 데이터 수집: Xiaohongshu 키워드 크롤링

DrissionPage를 활용한 Xiaohongshu의 효율적인 데이터 수집

1. 프로젝트 배경 및 목적

현대 디지털 시대에서 여행 정보는 주로 소셜 미디어 플랫폼을 통해 얻어집니다. 그러나 이러한 플랫폼에서 얻은 정보들은 종종 비구조화되어 있어, 이를 이용해 실질적인 여행 계획을 세우는 것은 어려움이 있습니다. 이 문제를 해결하기 위해 "TripGuide: 스마트 여행 일정 도우미"라는 웹 애플리케이션을 개발하였습니다.

2. 기술 선택과 도전 과제

2.1 직면한 문제들

Xiaohongshu 웹사이트 분석 시 다음과 같은 기술적 난관이 있었습니다: - SSR(Server-Side Rendering) 사용으로 인한 데이터 추출의 복잡성 - 동적으로 로드되는 댓글 데이터 처리 필요 - 비구조화된 노이즈 데이터(예: 이모티콘, 광고 태그)의 제거 요구

2.2 DrissionPage를 통한 해결 방안

Selenium 대신 DrissionPage 프레임워크를 선택하여 페이지 구조 변경에 따른 파싱 실패를 줄이고, 성능을 향상시켰습니다.

3. 핵심 코드 구현

3.1 초기화와 데이터 스트림 리스닝

코드 보기
def search_notes(self, keyword, limit):
    print(f"키워드 검색: {keyword}")
    self.dp.listen.start('search/notes')
    self.dp.get(url)
    # 스크롤 다운 시뮬레이션 ...
    resp = self.dp.listen.wait(timeout=10)
    items = resp['response']['body'].get('data', {}).get('items', [])

3.2 SSR 및 동적 로딩 처리

코드 보기
def fill_details(self, note):
    html = self.dp.html
    content = self._extract_str(html, 'noteContent":"', '","serverInfo"')
    self.dp.scroll.bottom()
    comments = self.dp.listen.wait(timeout=5)

3.3 AI를 활용한 ETL 프로세스

코드 보기
def ai_summary(self, raw_text, location_name):
    prompt = f"""
    당신은 여행 데이터 전문가입니다. 다음 관광지 "{location_name}"에 대한 노트에서:
    1. 이모티콘 및 광고를 제거하고 150자 요약을 제공하세요.
    2. 관광지의 주요 카테고리를 결정하세요 (자연 경관/역사 유적/음식 등).
    【내용】: {raw_text[:4000]}
    """
    response = dashscope.Generation.call(model='qwen-turbo', prompt=prompt)
    return response['output']['text']

4. 실행 결과 및 성과

데이터 정제 후, 데이터베이스 저장 표준을 충족하며, 최종적으로 openGauss/PostgreSQL DB에 저장됩니다.

태그: Xiaohongshu DrissionPage python AI DataExtraction

7월 13일 20:24에 게시됨