WikipediaにはMediaWikiというAPIがあって記事データなどを取得できる。このAPIとPythonでWikipediaの記事内容を取得してみる。
Raspberry PiとRaspbian Stretch。
MediaWikiのページにはAPI用のエンドポイントが記載されているが、日本語の場合はhttps://ja.wikipedia.org/w/api.phpを使う。
取得できるデータのフォーマットにはjsonやxmlがあるが、API:データ形式によるとxmlでの取得はこの先廃止されるらしいのでここではjsonで取得する。
APIで記事内容を取得するクエリはAPI:Query/jaのSample queryを参照。ただし、formatはjsonに変更して使用する。
最終的に、以下のようなリクエストを送信する。titlesには取得するページのタイトルを指定する。
以下のコードで「ウィキペディア」ページの記事内容を取得する。
結果は以下のように、Wikipedia書式(ヘルプ:書式整形)のテキストが得られる。
環境
Raspberry PiとRaspbian Stretch。
エンドポイントとリクエストクエリ
MediaWikiのページにはAPI用のエンドポイントが記載されているが、日本語の場合はhttps://ja.wikipedia.org/w/api.phpを使う。
取得できるデータのフォーマットにはjsonやxmlがあるが、API:データ形式によるとxmlでの取得はこの先廃止されるらしいのでここではjsonで取得する。
APIで記事内容を取得するクエリはAPI:Query/jaのSample queryを参照。ただし、formatはjsonに変更して使用する。
最終的に、以下のようなリクエストを送信する。titlesには取得するページのタイトルを指定する。
https://ja.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&format=json&formatversion=2&titles=Main%20Page
APIでWikipediaの記事を取得してみる
以下のコードで「ウィキペディア」ページの記事内容を取得する。
from urllib.request import Request, urlopen from urllib.parse import urlencode from urllib.error import URLError, HTTPError import json def set_params(page_title): params = { 'action': 'query', 'prop': 'revisions', 'rvprop': 'content', 'titles': page_title, 'formatversion': 2, 'format': 'json', } return params def main(): request_url = 'https://ja.wikipedia.org/w/api.php?' + urlencode(set_params('ウィキペディア')) req = Request(request_url) try: with urlopen(req) as res: res_json = res.read() except HTTPError as e: print('HTTPError: {}'.format(e.reason)) except URLError as e: print('URLError: {}'.format(e.reason)) else: wiki = json.loads(res_json.decode('utf-8')) print(wiki['query']['pages'][0]['revisions'][0]['content']) if __name__ == '__main__': main()
結果は以下のように、Wikipedia書式(ヘルプ:書式整形)のテキストが得られる。
0 件のコメント:
コメントを投稿