2017-07-29 29 views
1

我使用維基媒體API從維基百科文章'https://en.wikipedia.org/w/api.php?action=query&prop=links&redirects&pllimit=500&format=json'中檢索所有可能的URL,但它只給出鏈接標題的列表,例如人工智能,維基百科頁面有一個標題爲「傳送網絡」的鏈接, ,但實際的網址是「https://en.wikipedia.org/wiki/Content_delivery_network」,這正是我想要的如何使用mediawiki API在維基百科文章中獲取所有網址(不只是標題)?

回答

1

我已經替換了大部分我以前的答案,包括代碼,以便使用Tgr答案中提供的信息,以防其他人想要樣本Python代碼。這段代碼很大程度上基於Mediawiki的代碼,用於所謂的「原始延續」。

我有意將每個調用所請求的鏈接數限制爲五個,這樣可以演示更多的參數可能性。注意到資本 -

import requests 

def query(request): 
    request['action'] = 'query' 
    request['format'] = 'json' 
    request['prop'] = 'info' 
    request['generator'] = 'links' 
    request['inprop'] = 'url' 
    previousContinue = {} 
    while True: 
     req = request.copy() 
     req.update(previousContinue) 
     result = requests.get('http://en.wikipedia.org/w/api.php', params=req).json() 
     if 'error' in result: 
      raise Error(result['error']) 
     if 'warnings' in result: 
      print(result['warnings']) 
     if 'query' in result: 
      yield result['query'] 
     if 'continue' in result: 
      previousContinue = {'gplcontinue': result['continue']['gplcontinue']} 
     else: 
      break 

count = 0   
for result in query({'titles': 'Estelle Morris', 'gpllimit': '5'}): 
    for url in [_['fullurl'] for _ in list(result.values())[0].values()]: 
     print (url) 

我,如果OP想做具有人工智能類似的話那麼他應該有「人工智能」開始我的第一個答案提及。否則,搜索將以消除歧義頁面開始,以及可能出現的所有複雜問題。

+0

感謝您提供代碼和努力,我將通過代碼:) –

+0

非常歡迎您。 –

+1

我應該在mediawiki上記錄關於此代碼的大部分或大部分想法的頁面:https://www.mediawiki.org/wiki/API:Query。 –

相關問題