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