Mwclient
Python client library to interface with the MediaWiki API
Page
mwclient에서 page 객체의 각 속성이 의미하는 바는 다음과 같습니다:
기본 정보
- namespace: 페이지의 네임스페이스 번호 (예: 0은 일반 문서, 1은 토론 문서 등)
- name: 페이지의 전체 이름 (네임스페이스 포함)
- page_title: 페이지의 제목 (네임스페이스 제외)
- base_title: 페이지의 기본 제목 (서브페이지가 있는 경우, 루트 페이지 제목)
- base_name: base_title과 유사하지만, 서브페이지 이름을 포함할 수도 있음
예제
- Template:Table:Android:AOSP 페이지 요청시:
- namespace: 10
- name: 틀:Table:Android:AOSP
- page_title: Table:Android:AOSP
- base_title: Table:Android:AOSP
- base_name: 틀:Table:Android:AOSP
수정 및 리비전 관련 정보
- touched: 마지막으로 수정된 날짜 및 시간 (datetime 객체로 변환)
- revision: 현재 리비전 ID
- exists: 페이지가 존재하는지 여부 (True/False)
- length: 페이지의 바이트 단위 길이 (문서 크기)
- redirect: 페이지가 리디렉션인지 여부 (True/False)
- page_id: 페이지의 고유한 ID
보호 및 편집 제한 관련 정보
- protection: 페이지 보호 상태 (예: 편집 보호, 이동 보호 등)
- content_model: 페이지의 콘텐츠 모델 (예: wikitext, json, Scribunto 등)
- page_language: 페이지의 언어 설정
- restriction_types: 페이지에 적용된 제한 유형 목록 (예: edit, move 등)
편집 및 리비전 타임스탬프
- edit_time: 마지막 편집 시간
- last_rev_time: 마지막 리비전 시간
전체 페이지 목록 확보
import mwclient
import markdown
import os
# MediaWiki 사이트 설정
WIKI_URL = 'your.mediawiki.url'
USERNAME = 'your_username'
PASSWORD = 'your_password'
# 저장할 디렉토리 설정
OUTPUT_DIR = "wiki_markdown"
os.makedirs(OUTPUT_DIR, exist_ok=True)
# 사이트 연결 및 로그인
site = mwclient.Site(WIKI_URL, path='/')
site.login(USERNAME, PASSWORD)
# 모든 페이지 가져오기
for page in site.allpages():
title = page.name
content = page.text()
# Markdown 변환 (기본 변환, 추가적인 변환 필요할 수 있음)
markdown_content = markdown.markdown(content)
# 파일명 정리 (파일명에 사용할 수 없는 문자 대체)
filename = title.replace("/", "_").replace(":", "_") + ".md"
filepath = os.path.join(OUTPUT_DIR, filename)
# Markdown 파일로 저장
with open(filepath, "w", encoding="utf-8") as md_file:
md_file.write(markdown_content)
print(f"변환 완료: {filename}")
Page
page = site.pages['Python (programming language)']
로 특정 페이지 객체를 획득할 수 있다.
-
page.text()
- 페이지 내용 얻기 -
print(page.categories())
- 페이지의 카테고리 출력 -
print(page.images())
- 페이지에 포함된 이미지 출력 -
print(page.fullurl())
- 실제 URL 가져오기 -
file_name = urlparse(url).path.split('/')[-1]
- URL에서 파일명만 추출 -
page_id = page.pageid
- 페이지 ID 가져오기
Troubleshooting
=== WARNING Main-account login via "action=login" is deprecated and may stop working without warning ===
2025-02-04 16:02:12.595 1467510/130431506324352 mwclient.client WARNING Subscribe to the mediawiki-api-announce mailing list at <https://lists.wikimedia.org/postorius/lists/mediawiki-api-announce.lists.wikimedia.org/> for notice of API deprecations and breaking changes.
2025-02-04 16:02:12.595 1467510/130431506324352 mwclient.client WARNING Main-account login via "action=login" is deprecated and may stop working without warning. To continue login with "action=login", see [[Special:BotPasswords]]. To safely continue using main-account login, see "action=clientlogin".