본문 바로가기
Programming/Python

[Python] Trafilatura 웹 크롤링 쉽게 하기

by 코딩하는 금융인 2024. 11. 17.

안녕하세요.

오늘은 셀레니움 등 기존 웹 크롤링 파이썬 라이브러리에 비해 강력한 성능을 가진 Trafilatura에 대해 알아보겠습니다.

 

 Python Trafilatura

파이썬에서 웹 페이지의 본문 내용을 효과적으로 추출할 수 있는 강력한 라이브러리

 

 - HTML, XML, 텍스트 등 다양한 형식의 문서를 처리할 수 있으며, 웹 스크래핑과 데이터 마이닝에 특히 유용함

 - Beautifulsoup, Selenium에 비해 간결한 코드로 크롤링이 가능함

 - (주요 특징)

  1. 간단한 사용법: 몇 줄의 코드만으로 웹 페이지의 본문을 추출할 수 있음
  2. 자동 구조 분석: 웹 페이지의 구조를 자동으로 분석하여 본문을 식별함
  3. 메타데이터 추출: 제목, 저자, 날짜 등의 메타데이터도 함께 추출할 수 있음
  4. 다양한 출력 형식: 텍스트, JSON, XML 등 다양한 형식으로 결과를 출력할 수 있음

▣ Trafilatura 사용 예시

 - 해당 라이브러리를 통해서 아래 스포츠 기사의 본문을 크롤링

https://m.sports.naver.com/esports/article/015/0005057943?sid3=79b

 - (코드 설명)

  1. trafilatura.fetch_url(url)을 사용하여 지정된 URL의 웹 페이지를 다운로드
  2. trafilatura.extract() 함수를 사용하여 다운로드된 내용에서 본문과 메타데이터를 추출, 이때 output_format="json"으로 설정하여 JSON 형식의 출력을 얻고, with_metadata=True로 메타데이터를 포함시킴
  3. json.loads()를 사용하여 JSON 문자열을 파이썬 딕셔너리로 변환
  4. 변환된 딕셔너리에서 'title' 키를 사용하여 제목을 출력
  5. 'text' 키를 사용하여 본문을 출력
# 패키지 설치
pip install trafilatura

import trafilatura

# 크롤링할 URL 설정
url = "https://m.sports.naver.com/esports/article/015/0005057943?sid3=79b"

# 웹 페이지 다운로드
downloaded = trafilatura.fetch_url(url)

# 본문 및 메타데이터 추출
result = trafilatura.extract(downloaded, output_format="json", include_comments=False, include_links=False, with_metadata=True)

# JSON 문자열을 파이썬 딕셔너리로 변환
import json
parsed_result = json.loads(result)

# 제목 출력
print("제목:", parsed_result['title'])

# 본문 출력
print("\n본문:")
print(parsed_result['text'])

 

  - 광고, 네비게이션 메뉴, 댓글 등의 불필요한 요소들은 제거되고 순수한 기사 내용과 제목만 추출

제목: 페이커, 2023 롤드컵 MVP 선정... 4번째 우승·3번째 MVP
본문: '리그 오브 레전드(LoL)' 최고의 선수 이상혁(27·T1·페이커)이 2023 LoL 월드챔피언십(롤드컵) 최우수선수(MVP)로 선정됐다. 이상혁은 20일(한국시간) 미국 인천 클라이맥스 아레나에서 열린 2023 롤드컵 결승전에서 웨이보 게이밍(WBG)을 3-0으로 제압하고 우승을 차지했다. 이상혁은 이번 우승으로 통산 4번째 롤드컵 우승 트로피를 들어올렸다. 또한 2013년, 2016년에 이어 세 번째로 롤드컵 MVP에 선정되는 영예를 안았다. 이상혁은 결승전 1세트에서 아지르를 선택해 5킬 1데스 6어시스트를 기록했고, 2세트에서는 오리아나로 1킬 2데스 8어시스트를 올렸다. 마지막 3세트에서는 아칼리를 골라 3킬 무데스 5어시스트로 활약하며 팀의 우승에 크게 기여했다. 이상혁은 이번 대회 전체 통계에서도 압도적인 모습을 보였다. KDA 5.7로 미드 라이너 중 1위를 차지했고, 분당 골드 획득량(430)과 분당 데미지량(604) 부문에서도 미드 라이너 중 1위에 올랐다. 한편 이날 결승전 1세트 종료 후 롤드컵 트로피인 서머너스 컵이 공개됐다. 서머너스 컵은 2012년 제작된 이후 처음으로 디자인이 변경됐다.
반응형

댓글