pywikibot tutorial for Wikidata

Lesson 3: Big data

import pywikibot

from pywikibot import pagegenerators as pg

def list_template_usage(site_obj, tmpl_name):
    """
    Takes Site object and template name and returns a generator.

    The function expects a Site object (pywikibot.Site()) and
    a template name (String). It creates a list of all
    pages using that template and returns them as a generator.
    The generator will load 50 pages at a time for iteration.
    """
    name = "{}:{}".format(site_obj.namespace(10), tmpl_name)
    tmpl_page = pywikibot.Page(site_obj, name)
    ref_gen = pg.ReferringPageGenerator(tmpl_page, onlyTemplateInclusion=True)
    filter_gen = pg.NamespaceFilterPageGenerator(ref_gen, namespaces=[0])
    generator = site_obj.preloadpages(filter_gen, pageprops=True)
    return generator

site = pywikibot.Site("zh-yue", 'wikipedia')
tmpl_gen = list_template_usage(site, "英格蘭郡明細")

for page in tmpl_gen:
    item = pywikibot.ItemPage.fromPage(page)
    print(page.title(), item.getID())
Retrieving 26 pages from wikipedia:zh-yue.
杜咸郡 Q23082
大倫敦 Q23306
雅息士郡 Q23240
修適士郡 Q23346
金巴倫郡 Q23066
蘭開夏郡 Q23077
打比郡 Q23098
林肯郡 Q23090
史樂郡 Q23103
史德福郡 Q23105
律倫郡 Q23107
亨廷頓郡 Q23330
告羅士打郡 Q23165
牛津郡 Q23169
劍橋郡 Q23112
修福郡 Q23111
德雲郡 Q23156
森麻錫郡 Q23157
多實郡 Q23159
咸普郡 Q23204
舒梨郡 Q23276
根德郡 Q23298
大曼徹斯特 Q23099
南約郡 Q23095
東修適士 Q23293
威特島 Q9679
tmpl_gen = list_template_usage(site, "電影資料盒")

count = 0
for page in tmpl_gen:
    item = pywikibot.ItemPage.fromPage(page)
    print(page.title(), item.getID())
    count = count+1
    if count >= 70:
        break
    
Retrieving 50 pages from wikipedia:zh-yue.
太空戰士VII:天子再臨 Q387674
功夫 (電影) Q470759
黐線 (電影) Q11178873
蝙蝠俠 (1989年電影) Q116852
戰神 Q7233715
月滿軒尼詩 Q4197996
死亡遊戲 Q854576
再見阿郎 (1999年電影) Q3567723
半醉人間 Q5139690
鬼馬雙星 Q3270132
天才與白痴 Q1028693
半斤八兩 Q3054597
賣身契 (電影) Q1028669
摩登保鑣 Q3270113
勁抽福祿壽 Q7734896
熱浪球愛戰 Q4875755
打擂台 (2010年電影) Q1083002
八寶奇兵 Q7783681
偶然 (電影) Q13642776
男人之苦 (電影) Q11049650
靚妹仔 Q5238758
俏皮女學生 Q5653032
停不了的愛 Q5238678
滅門 Q4840176
惡胎 Q5238748
皇家大賊 Q5216003
凶男寡女 Q7456262
亞飛與亞基 Q7729250
復仇者之死 Q7317889
逆戰 Q931239
新紮師妹 Q855300
志明與春嬌 Q1082977
保衞戰隊之出動喇!朋友! Q6532388
咖喱辣椒 Q840589
回魂夜 (1995年電影) Q996825
人約離婚後 Q6690863
大藍湖 Q4905157
性工作者十日談 Q7993993
我不賣身我賣子宮 Q7847556
跛豪 Q837058
重案組 (電影) Q1585023
大事件 Q903842
前度 (電影) Q4198002
龍鳳茶樓 (電影) Q3272536
犀照 (電影) Q7220326
絕色武器 Q6960504
開心魔法 Q6730981
喜愛夜蒲 Q6482796
寒戰 Q2089457
懸紅 (電影) Q8421664
Retrieving 50 pages from wikipedia:zh-yue.
法外情 Q7771764
G4特工 Q7099007
中國最後一個太監 Q6473656
天與地 (電影) Q7800121
法內情 Q7770582
2013我愛HK 恭喜發財 Q4027389
大上海 Q2782486
楊門女將之軍令如山 Q2152950
百星酒店 Q9620656
三國之見龍卸甲 Q703857
搭錯車 Q4185503
過界 (2013年電影) Q15227845
聖誕玫瑰 (電影) Q13364726
C+偵探 Q4183998
過界 Q32149947
乾旦路 Q16321632
無招勝有招 Q13418371
歡樂神仙窩 Q13418357
追女仔 Q13418416
瘋狂大老千 Q13418457

pagegenerators grabs 50 pages at a time, but will simply continue running and grab another 50 page when you allow the iteration to continue, until all pages are exhausted.

SPARQL query

The next section depends on the SPARQL query in the same folder as this notebook.

import pywikibot
from pywikibot import pagegenerators as pg

with open('pka-query.rq', 'r') as query_file:
    QUERY = query_file.read()#.replace('\n', '')

wikidata_site = pywikibot.Site("wikidata", "wikidata")
generator = pg.WikidataSPARQLPageGenerator(QUERY, site=wikidata_site)

count = 0
for item in generator:
    count = count + 1
    print(item)

print(count)
[[wikidata:Q161249]]
[[wikidata:Q223069]]
[[wikidata:Q23994814]]
[[wikidata:Q23637413]]
[[wikidata:Q18378717]]
[[wikidata:Q903362]]
[[wikidata:Q407743]]
[[wikidata:Q16392]]
[[wikidata:Q23775141]]
[[wikidata:Q409013]]
[[wikidata:Q4118]]
[[wikidata:Q23993898]]
[[wikidata:Q849881]]
[[wikidata:Q170591]]
[[wikidata:Q409141]]
[[wikidata:Q259997]]
[[wikidata:Q423953]]
[[wikidata:Q410234]]
[[wikidata:Q1147539]]
[[wikidata:Q410521]]
[[wikidata:Q242627]]
[[wikidata:Q319541]]
[[wikidata:Q408925]]
[[wikidata:Q229935]]
[[wikidata:Q324628]]
[[wikidata:Q484583]]
[[wikidata:Q407796]]
[[wikidata:Q188017]]
[[wikidata:Q23636070]]
[[wikidata:Q27261795]]
[[wikidata:Q23993534]]
[[wikidata:Q208451]]
[[wikidata:Q4634183]]
[[wikidata:Q181136]]
[[wikidata:Q170545]]
[[wikidata:Q903345]]
[[wikidata:Q161495]]
[[wikidata:Q23978281]]
[[wikidata:Q410387]]
[[wikidata:Q23698430]]
[[wikidata:Q417852]]
[[wikidata:Q1637944]]
[[wikidata:Q2542075]]
[[wikidata:Q414207]]
[[wikidata:Q24004478]]
[[wikidata:Q424000]]
[[wikidata:Q408898]]
[[wikidata:Q58447]]
[[wikidata:Q26997410]]
[[wikidata:Q23993507]]
[[wikidata:Q285790]]
[[wikidata:Q483752]]
[[wikidata:Q139199]]
[[wikidata:Q16954761]]
[[wikidata:Q23995131]]
[[wikidata:Q194406]]
[[wikidata:Q26075]]
[[wikidata:Q23978293]]
[[wikidata:Q209569]]
[[wikidata:Q153]]
[[wikidata:Q424314]]
[[wikidata:Q184832]]
[[wikidata:Q3771739]]
[[wikidata:Q173670]]
[[wikidata:Q161233]]
[[wikidata:Q61457]]
[[wikidata:Q23978286]]
[[wikidata:Q411119]]
[[wikidata:Q288188]]
[[wikidata:Q413822]]
[[wikidata:Q6477050]]
[[wikidata:Q23638211]]
[[wikidata:Q48318]]
[[wikidata:Q209284]]
[[wikidata:Q2676918]]
[[wikidata:Q485277]]
[[wikidata:Q1208441]]
[[wikidata:Q164785]]
[[wikidata:Q24007261]]
[[wikidata:Q424966]]
[[wikidata:Q3269240]]
[[wikidata:Q23637352]]
[[wikidata:Q408822]]
[[wikidata:Q60235]]
[[wikidata:Q23779747]]
[[wikidata:Q23978434]]
[[wikidata:Q2468]]
[[wikidata:Q417571]]
[[wikidata:Q409304]]
[[wikidata:Q19903909]]
[[wikidata:Q52353]]
[[wikidata:Q4596742]]
[[wikidata:Q24004551]]
[[wikidata:Q14982]]
[[wikidata:Q104334]]
[[wikidata:Q412845]]
[[wikidata:Q22266828]]
[[wikidata:Q3143743]]
[[wikidata:Q23978270]]
[[wikidata:Q171877]]
[[wikidata:Q130336]]
[[wikidata:Q497073]]
[[wikidata:Q905558]]
[[wikidata:Q899683]]
[[wikidata:Q23993292]]
[[wikidata:Q167934]]
[[wikidata:Q23994813]]
[[wikidata:Q107184]]
[[wikidata:Q211891]]
[[wikidata:Q421035]]
[[wikidata:Q20035886]]
[[wikidata:Q23636061]]
[[wikidata:Q181003]]
[[wikidata:Q186474]]
[[wikidata:Q23993346]]
[[wikidata:Q18344129]]
[[wikidata:Q417321]]
[[wikidata:Q413374]]
[[wikidata:Q191381]]
[[wikidata:Q4087]]
[[wikidata:Q22829186]]
[[wikidata:Q23698414]]
[[wikidata:Q218642]]
[[wikidata:Q409692]]
[[wikidata:Q23636064]]
[[wikidata:Q23978210]]
[[wikidata:Q24005563]]
[[wikidata:Q133145]]
[[wikidata:Q187045]]
[[wikidata:Q412316]]
[[wikidata:Q191700]]
[[wikidata:Q194207]]
[[wikidata:Q23767]]
[[wikidata:Q424284]]
[[wikidata:Q23637022]]
[[wikidata:Q413334]]
[[wikidata:Q2409]]
[[wikidata:Q23994379]]
[[wikidata:Q24008333]]
[[wikidata:Q23779745]]
[[wikidata:Q23636732]]
[[wikidata:Q23978278]]
[[wikidata:Q484940]]
[[wikidata:Q23637400]]
[[wikidata:Q410465]]
[[wikidata:Q213580]]
[[wikidata:Q24014027]]
[[wikidata:Q2474643]]
[[wikidata:Q22124685]]
[[wikidata:Q184782]]
[[wikidata:Q23636743]]
[[wikidata:Q41576]]
[[wikidata:Q412033]]
[[wikidata:Q20963648]]
[[wikidata:Q288208]]
[[wikidata:Q414196]]
[[wikidata:Q2462]]
[[wikidata:Q24004560]]
[[wikidata:Q410621]]
[[wikidata:Q410243]]
[[wikidata:Q23889676]]
[[wikidata:Q620730]]
[[wikidata:Q24004759]]
[[wikidata:Q420331]]
[[wikidata:Q178450]]
[[wikidata:Q47512]]
[[wikidata:Q5276432]]
[[wikidata:Q190227]]
[[wikidata:Q23978438]]
[[wikidata:Q16391]]
[[wikidata:Q180341]]
[[wikidata:Q49546]]
[[wikidata:Q83320]]
[[wikidata:Q23978431]]
[[wikidata:Q411362]]
[[wikidata:Q410116]]
[[wikidata:Q159683]]
[[wikidata:Q23978297]]
[[wikidata:Q209354]]
[[wikidata:Q421761]]
[[wikidata:Q27076975]]
[[wikidata:Q23978208]]
[[wikidata:Q417414]]
[[wikidata:Q407699]]
[[wikidata:Q408022]]
[[wikidata:Q420554]]
[[wikidata:Q24007763]]
[[wikidata:Q1209336]]
188
dir(item)
['__class__',
 '__delattr__',
 '__dict__',
 '__dir__',
 '__doc__',
 '__eq__',
 '__format__',
 '__ge__',
 '__getattribute__',
 '__gt__',
 '__hash__',
 '__init__',
 '__init_subclass__',
 '__le__',
 '__lt__',
 '__module__',
 '__ne__',
 '__new__',
 '__reduce__',
 '__reduce_ex__',
 '__repr__',
 '__setattr__',
 '__sizeof__',
 '__str__',
 '__subclasshook__',
 '__unicode__',
 '__weakref__',
 '_cache_attrs',
 '_cmpkey',
 '_cosmetic_changes_hook',
 '_defined_by',
 '_diff_to',
 '_getInternals',
 '_get_parsed_page',
 '_latest_cached_revision',
 '_link',
 '_namespace',
 '_namespace_obj',
 '_normalizeData',
 '_normalizeLanguages',
 '_revisions',
 '_save',
 'addClaim',
 'applicable_protections',
 'aslink',
 'autoFormat',
 'backlinks',
 'botMayEdit',
 'canBeEdited',
 'categories',
 'change_category',
 'clear_cache',
 'concept_uri',
 'concept_url',
 'content_model',
 'contributingUsers',
 'contributors',
 'coordinates',
 'data_item',
 'data_repository',
 'defaultsort',
 'delete',
 'depth',
 'editAliases',
 'editDescriptions',
 'editEntity',
 'editLabels',
 'editTime',
 'embeddedin',
 'encoding',
 'entity_type',
 'exists',
 'expand_text',
 'extlinks',
 'fromPage',
 'from_entity_uri',
 'fullVersionHistory',
 'full_url',
 'get',
 'getCategoryRedirectTarget',
 'getCreator',
 'getDeletedRevision',
 'getID',
 'getLatestEditors',
 'getMovedTarget',
 'getOldVersion',
 'getRedirectTarget',
 'getReferences',
 'getRestrictions',
 'getSitelink',
 'getTemplates',
 'getVersionHistory',
 'getVersionHistoryTable',
 'getdbName',
 'id',
 'image_repository',
 'imagelinks',
 'interwiki',
 'isAutoTitle',
 'isCategory',
 'isCategoryRedirect',
 'isDisambig',
 'isEmpty',
 'isFlowPage',
 'isImage',
 'isIpEdit',
 'isRedirectPage',
 'isStaticRedirect',
 'isTalkPage',
 'is_categorypage',
 'is_filepage',
 'is_flow_page',
 'is_valid_id',
 'iterlanglinks',
 'iterlinks',
 'itertemplates',
 'langlinks',
 'lastNonBotUser',
 'latestRevision',
 'latest_revision',
 'latest_revision_id',
 'linkedPages',
 'loadDeletedRevisions',
 'markDeletedRevision',
 'mergeInto',
 'merge_history',
 'move',
 'moved_target',
 'namespace',
 'oldest_revision',
 'pageAPInfo',
 'page_image',
 'pageid',
 'permalink',
 'preloadText',
 'previousRevision',
 'previous_revision_id',
 'properties',
 'protect',
 'protection',
 'purge',
 'put',
 'put_async',
 'removeClaims',
 'removeImage',
 'removeSitelink',
 'removeSitelinks',
 'replaceImage',
 'repo',
 'revision_count',
 'revisions',
 'save',
 'section',
 'sectionFreeTitle',
 'setSitelink',
 'setSitelinks',
 'set_redirect_target',
 'site',
 'templates',
 'text',
 'title',
 'titleForFilename',
 'titleWithoutNamespace',
 'title_pattern',
 'toJSON',
 'toggleTalkPage',
 'touch',
 'undelete',
 'urlname',
 'userName',
 'version',
 'watch']
item.getID()
'Q1209336'