3

私は大規模な (5 万ページ以上) Mediawiki wiki を持っており、最終更新時刻でソートされたすべてのページのリストを効率的に取得する必要があります。私は pywikibot を使用して Python で作業しています。ドキュメントはこれが可能であることを示唆していますが、私はまだそれを行う方法を解読していません. (最大 500 ページを簡単にダウンロードできます。) 500 のバッチをアルファベット順にダウンロードし、ページごとに更新時間を取得し、バッチをマージするよりも効率的な合理的な方法はありますか?

4

2 に答える 2

-1

掘り下げて多くの実験を行った後、pywikibot を使用して、最終更新時刻でソートされたすべてのページのリストを生成するソリューションを見つけました。

wiki=pywikibot.Site()
current_time = wiki.server_time()
iterator=wiki.recentchanges(start = current_time, end=current_time - timedelta(hours=600000))   # Not for all time, just for the last 60 years...
listOfAllWikiPages=[]
for v in iterator:
    listOfAllWikiPages.append(v)

# This has an entry for each revision.
# Get rid of the older instances of each page by creating a dictionary which 
# only contains the latest version.
temp={}
for p in listOfAllWikiPages:
    if p["title"] in temp.keys():
        if p["timestamp"] > temp[p["title"]]["timestamp"]:
            temp[p["title"]]=p
    else:
        temp[p["title"]]=p

# Recreate the listOfAllWikiPages from the de-duped dictionary
listOfAllWikiPages=list(temp.values())
于 2020-01-10T19:18:11.163 に答える