위키피디아(wikipeida)에는 페이지를 손쉽게 크롤링 할수 있도록 api를 제공한다.

설치

사용전에 먼저 api를 설치해줘야 한다.
IntEnum 을 사용하기 때문에 파이썬 3.4 버전 이상이 필요하다고 한다.

터미널에서 아래 코드로 api를 설치한다.

pip install wikipedia-api

임포팅

설치가 되었으면 api를 임포트 한다.

import wikipediaapi

단일 페이지 가져오기

위키피디아 인스턴스를 만든 후 파이썬 페이지를 가져오는 방법이다.

    wiki_wiki = wikipediaapi.Wikipedia('en');
    page_py = wiki_wiki.page('Python_(programming_language)');

인스턴스 생성시 ‘en’ 파라미터는 영문 위키를 가져온다는 뜻이다.
‘kr’로 한국어 위키도 가져올 수 있다.

page("원하는 페이지 제목") 으로 페이지를 가져올 수 있다.

페이지 존재 확인

페이지가 존재하면 True, 아니면 False를 반환한다.

    page_py = wiki_wiki.page('Python_(programming_language)');
    print(f"Page - Exists: {page_py.exists()}");
    # Page - Exists: True

    page_missing = wiki_wiki.page('NonExistingPageWithStrangeName');
    print(f"Page - Exists: {page_missing.exists()}");
    # Page - Exists: False

페이지 제목과 요약 가져오기

페이지 제목과 가장위의 요약 문단을 가져온다.

    print(f"Page - Title: {page_py.title}");
    # Page - Title: Python (programming language)
    print(f"Page - Summary: {page_py.summary}");
    # Page - Summary: Python is a widely used high-level programming...    

페이지 url 가져오기

    print(page_py.fullurl);
    # https://en.wikipedia.org/wiki/Python_(programming_language)

    print(page_py.canonicalurl);
    # https://en.wikipedia.org/wiki/Python_(programming_language)

전체 페이지 가져오기

wiki_wiki = wikipediaapi.Wikipedia(
        language='en',
        extract_format=wikipediaapi.ExtractFormat.WIKI);

p_wiki = wiki_wiki.page("Python_(programming_language)");
print(p_wiki.text);
# Summary
# Section 1
# Text of section 1
# Section 1.1
# Text of section 1.1
# ...

extract_formatwikipediaapi.ExtractFormat.HTML로 지정시
HTML 포멧으로도 가져올 수 있다.

섹션 가져오기

가져온 페이지에서 섹션별로 가져온다.

def print_sections(sections, level=0):
        for s in sections:
                print("%s: %s - %s" % ("*" * (level + 1), s.title, s.text[0:40]));
                print_sections(s.sections, level + 1);

print_sections(page_py.sections);

# *: History - Python was conceived in the late 1980s,
# *: Features and philosophy - Python is a multi-paradigm programming l
# *: Syntax and semantics - Python is meant to be an easily readable
# **: Indentation - Python uses whitespace indentation, rath
# **: Statements and control flow - Python's statements include (among other
# **: Expressions - Some Python expressions are similar to l

출처

좀더 디테일한 기능은 위키피디아api 페이지에서 확인 할 수 있다.
Wikipedia-AP

Leave a comment