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の記事を取得してみる
以下のコードで「ウィキペディア」ページの記事内容を取得する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | 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(): 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 件のコメント:
コメントを投稿