Skip to content

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".

See also

Favorite site