''' 27. 内部リンクの除去 26の処理に加えて,テンプレートの値からMediaWikiの内部リンクマークアップを除去し,テキストに変換せよ(参考: マークアップ早見表). ''' from chr3 import ARTICLE_UK, re regex1 = re.compile(r'^\|(.+?)\s=\s(.+?)$', re.MULTILINE) regex2 = re.compile(r'\'{3}') regex3 = re.compile(r'\[\[(.*?)\]\]') uk_dict = {} for i in regex1.findall(ARTICLE_UK()): prepare = regex2.sub("", i[1]) prepare = regex3.sub(r'\1', prepare) uk_dict[i[0]] = prepare print(uk_dict)
''' 22. カテゴリ名の抽出 記事のカテゴリ名を(行単位ではなく名前で)抽出せよ. ''' from chr3 import ARTICLE_UK, re article_UK = ARTICLE_UK().split('\n') regex = re.compile(r'\[\[Category:(.+?)(\]\]|\|\*\]\])') for lines in article_UK: result = regex.search(lines) if result: print(result.group(1)) #どっちでもできる regex = re.compile(r'^\[\[Category:(.+?)(\]\]|\|\*\]\])$', re.MULTILINE) for lines in regex.findall(ARTICLE_UK()): print(lines[0])
''' 21. カテゴリ名を含む行を抽出 記事中でカテゴリ名を宣言している行を抽出せよ. ''' from chr3 import ARTICLE_UK, re article_UK = ARTICLE_UK().split('\n') for lines in article_UK: if 'Category' in lines: print(lines) #行だから上で良さそうだけど[]無しも一応。 regex = re.compile(r'\[\[(Category.*?)(\||])') for lines in article_UK: result = regex.search(lines) if result: print(result.group(1))
''' 25. テンプレートの抽出 記事中に含まれる「基礎情報」テンプレートのフィールド名と値を抽出し,辞書オブジェクトとして格納せよ. ''' from chr3 import ARTICLE_UK, re regex = re.compile(r'^\|(.+?)\s=\s(.+?)$', re.MULTILINE) print({i[0]: i[1] for i in regex.findall(ARTICLE_UK())})
''' 29. 国旗画像のURLを取得する テンプレートの内容を利用し,国旗画像のURLを取得せよ.(ヒント: MediaWiki APIのimageinfoを呼び出して,ファイル参照をURLに変換すればよい) ''' from chr3 import ARTICLE_UK, re, json import requests regex = re.compile(r'^\|(.+?)\s=\s(.+?)$', re.MULTILINE) uk_dict = {i[0]: i[1] for i in regex.findall(ARTICLE_UK())} flag = uk_dict['国旗画像'] print(flag) URL = "https://en.wikipedia.org/w/api.php" S = requests.Session() PARAMS = { "action": "query", "format": "json", "prop": "imageinfo", "titles": "File:" + flag, "iiprop": "url" } R = S.get(url=URL, params=PARAMS) DATA = R.json() print(DATA['query']['pages']['23473560']['imageinfo'][0]['url'])