Skip to main content
GitHub CI Code coverage Python Top language Pywikibot release wheel Total downloads Monthly downloads Last commit

Pywikibot

The Pywikibot framework is a Python library that interfaces with the MediaWiki API version 1.31 or higher.

Also included are various general function scripts that can be adapted for different tasks.

For further information about the library excluding scripts see the full code documentation.

Quick start

git clone https://gerrit.wikimedia.org/r/pywikibot/core.git
cd core
git submodule update --init
pip install -r requirements.txt
python pwb.py <script_name>

Or to install using PyPI (excluding scripts)

pip install pywikibot
pwb <scriptname>

Our installation guide has more details for advanced usage.

Basic Usage

If you wish to write your own script it’s very easy to get started:

import pywikibot
site = pywikibot.Site('en', 'wikipedia')  # The site we want to run our bot on
page = pywikibot.Page(site, 'Wikipedia:Sandbox')
page.text = page.text.replace('foo', 'bar')
page.save('Replacing "foo" with "bar"')  # Saves the page

Wikibase Usage

Wikibase is a flexible knowledge base software that drives Wikidata. A sample pywikibot script for getting data from Wikibase:

import pywikibot
site = pywikibot.Site('wikipedia:en')
repo = site.data_repository()  # the Wikibase repository for given site
page = repo.page_from_repository('Q91')  # create a local page for the given item
item = pywikibot.ItemPage(repo, 'Q91')  # a repository item
data = item.get()  # get all item data from repository for this item

Script example

Pywikibot provides bot classes to develop your own script easily:

import pywikibot
from pywikibot import pagegenerators
from pywikibot.bot import ExistingPageBot

class MyBot(ExistingPageBot):

    update_options = {
        'text': 'This is a test text',
        'summary': 'Bot: a bot test edit with Pywikibot.'
    }

    def treat_page(self):
        """Load the given page, do some changes, and save it."""
        text = self.current_page.text
        text += '\n' + self.opt.text
        self.put_current(text, summary=self.opt.summary)

def main():
    """Parse command line arguments and invoke bot."""
    options = {}
    gen_factory = pagegenerators.GeneratorFactory()
    # Option parsing
    local_args = pywikibot.handle_args(args)  # global options
    local_args = gen_factory.handle_args(local_args)  # generators options
    for arg in local_args:
        opt, sep, value = arg.partition(':')
        if opt in ('-summary', '-text'):
            options[opt[1:]] = value
    MyBot(generator=gen_factory.getCombinedGenerator(), **options).run()

if __name__ == '__main__':
    main()

For more documentation on Pywikibot see our docs.

Roadmap

Release 11.7

  • Yield non-strict unconnected pages in APISite.unconnected_pages() and fix the regression introduced in 10.4.0.

  • api.Request.wait()and data.WaitingMixin.wait accept kwargs to be passed to exceptions.ApiTimeoutError. (T434974)

  • exceptions.ApiTimeoutErrorsupports site and uri attributes passed as parameters. (T434974)

  • Update translations (i18n)

  • Honor mode for uncompressed archives in tools.open_archive.

  • Remove minimum retry limit from maxlag wait cycle in data.api.Request.submit. (T434566)

  • Fix upload counter in specialbots.UploadRobot.

  • Avoid unnecessary pywikibot.Sitecreation in specialbots.UploadRobot.

  • Add page.BasePage.reviewand page.BasePage.unreview, which call APISite.review_revision(). (T408389)

  • Add APISite.review_revision() for the FlaggedRevsextension. (T408389)

  • Add show filters to APISite.blocks() ; they can be set by the new account, ip, ip_range and temp parameters. (T433531)

  • Duplicate pages are no longer yielded in page.BasePage.getReferencesand APISite.pagereferences()when backlinks and template inclusions overlap. (T405551)

  • page.BasePage.getOldVersionis only a convenience wrapper around page.BasePage.get_revision. It is deprecated now in favour of get_revision(oldid, content=True).text. (T433799)

  • HTML comments spanning multiple lines are now recognized with textlib.Timestripper. (T432541)

  • The lang parameter of the i18n.altlangfunction is now positional-only. The lang value is no longer included in the returned fallback sequence; the fallback sequence was changed from a list to a tuple.

  • Raise the newly implemented exceptions.CitoidErrorwhen the Citoid service of the data.citoidmodule returns an error response. (T433230)

  • Improvements for APISite.assert_valid_iter_params() : the msg_prefix parameter is now positional-only and the is_ts parameter is now keyword-only. If start and end parameters are datetime objects, the is_ts parameter is always treated as True. A ValueError is raised instead of AssertionError when start and end parameters are in the wrong order.

  • All ucshow parameters of Usercontribsare supported by APSite.usercontribs(), pywikibot.User.contributionsand pywikibot.User.contribs.

  • FlaggedRevssupport was added. The APSite.stable_revid() site method and the page.BasePage.stable_revision_idand page.BasePage.stable_revision properties were added to retrieve the stable revision and its ID. (T409848)

Deprecations

This section lists features, methods, parameters, or attributes that are deprecated and scheduled for removal in future Pywikibot releases.

Deprecated items may still work in the current release but are no longer recommended for use. Users should update their code according to the recommended alternatives.

Pywikibot follows a clear deprecation policy: features are typically deprecated in one release and removed in the third subsequent major release, remaining available for the two releases in between.

Pending removal in Pywikibot 12

  • 9.6.0: BaseSite.languages()will be removed in favour of BaseSite.codes

  • 9.5.0: DataSite.getPropertyType()will be removed in favour of DataSite.get_property_type()

  • 9.3.0: page.BasePage.userNameand page.BasePage.isIpEditare deprecated in favour of user or anon attributes of page.BasePage.latest_revisionproperty

  • 9.3.0: botflag parameter of Page.save(), Page.put() and Page.set_redirect_target()was renamed to bot

  • 9.2.0: All parameters of Page.templatesand Page.itertemplates()must be given as keyworded arguments

  • 9.2.0: Imports of loggingfunctions from the botmodule are deprecated and will be desupported

  • 9.2.0: total argument in -logevents pagegenerators option is deprecated; use -limit instead (T128981)

  • 9.0.0: The content parameter of proofreadpage.IndexPage.page_genis deprecated and will be ignored (T358635)

  • 9.0.0: next parameter of userinterfaces.transliteration.Transliterator.transliteratewas renamed to succ

  • 9.0.0: userinterfaces.transliteration.transliterator object was renamed to Transliterator

  • 9.0.0: The type parameter of site.APISite.protectedpages() was renamed to protect_type

  • 9.0.0: The all parameter of site.APISite.namespace() was renamed to all_ns

  • 9.0.0: filter parameter of date.dhwas renamed to filter_func

  • 9.0.0: dict parameter of data.api.OptionSetwas renamed to data

  • 9.0.0: version.get_toolforge_hostnameis deprecated with no replacement

  • 9.0.0: allrevisions parameter of xmlreader.XmlDumpis deprecated, use revisions instead (T340804)

  • 9.0.0: iteritems method of data.api.Requestwill be removed in favour of items

  • 9.0.0: SequenceOutputter.output() is deprecated in favour of the tools.formatter.SequenceOutputter.outproperty

Pending removal in Pywikibot 13

  • 10.7.0: The old (type, value, traceback) signature in tools.collections.GeneratorWrapper.throwwill be removed in Pywikibot 13, or earlier if it is dropped from a future Python release. (T340641)

  • 10.6.0: Family.isPublic()will be removed (T407049)

  • 10.6.0: Family.interwiki_replacementsis deprecated; use Family.code_aliasesinstead.

  • Keyword argument for char parameter of Transliterator.transliterate and positional arguments for prev and succ parameters are deprecated.

  • 10.6.0: Positional arguments of daemonize()are deprecated and must be given as keyword arguments.

  • 10.5.0: Accessing the fallback ‘*’ keys in ‘languages’, ‘namespaces’, ‘namespacealiases’, and ‘skins’ properties of APISite.siteinfoare deprecated and will be removed.

  • 10.5.0: The methods APISite.protection_types() and APISite.protection_levels() are deprecated. APISite.restrictionsshould be used instead.

  • 10.4.0: Require all parameters of Site.allpages() except start to be keyword arguments.

  • 10.4.0: Positional arguments of pywikibot.Coordinateare deprecated and must be given as keyword arguments.

  • 10.3.0: throttle.Throttle.getDelayand throttle.Throttle.setDelayswere renamed to get_delay()and set_delays() ; the old methods will be removed (T289318)

  • 10.3.0: throttle.Throttle.next_multiplicityattribute is unused and will be removed (T289318)

  • 10.3.0: requestsize parameter of throttle.Throttlecall is deprecated and will be dropped (T289318)

  • 10.3.0: textlib.to_latin_digitswill be removed in favour of textlib.to_ascii_digits, NON_LATIN_DIGITS of userinterfaces.transliteration will be removed in favour of NON_ASCII_DIGITS (T398146#10958283)

  • 10.2.0: tools.threading.RLockis deprecated and moved to backports module. The backports.RLock.countmethod is also deprecated. For Python 3.14+ use RLock from Python library threading instead. (T395182)

  • 10.1.0: revid and date parameters of Page.authorship() were dropped

  • 10.0.0: last_id of comms.eventstreams.EventStreamswas renamed to last_event_id (T309380)

  • 10.0.0: ‘millenia’ argument for precision parameter of pywikibot.WbTimeis deprecated; ‘millennium’ must be used instead

  • 10.0.0: includeredirects parameter of pagegenerators.AllpagesPageGeneratorand pagegenerators.PrefixingPageGeneratoris deprecated and should be replaced by filterredir

Pending removal in Pywikibot 14

  • 11.7.0: page.BasePage.getOldVersionis now deprecated in favour of get_revision(oldid, content=True).text. (T433799)

  • 11.7.0: The lang parameter of the i18n.altlangfunction is positional-only. Passing lang as a keyword argument is deprecated.

  • 11.7.0: The interface of APISite.assert_valid_iter_params() was changed. The msg_prefix parameter is now positional-only and the is_ts parameter is now keyword-only. The previous interface is deprecated.

  • 11.6.0: The top_only parameter of APISite.usercontribs has been deprecated; use top instead (T308961)

  • 11.5.0: family.Family.post_get_convertand family.Family.pre_put_convertfunctions are deprecated and will be removed (T431188)

  • 11.5.0: exceptions.TimeoutError is deprecated in favour of exceptions.ApiTimeoutError

  • 11.5.0: config``textfile_encoding`` variable will be removed; use ‘utf-8’ directly instead (T430454)

  • 11.4.0: The signature of APISite.allusers() was changed; all parameters are keyword-only.

  • 11.4.0: The signature of tools.open_archivewas changed. filename parameter is positional only, use_extension is keyword only.

  • 11.0.0: The User-Agent variable script_product is deprecated; use script instead. The User-Agent variable version is deprecated; use revision instead. The User-Agent variables lang, code and family are deprecated; use site instead.

  • 11.0.0: Positional argument for block parameter of pywikibot.async_manageris deprecated; use a keyword argument instead.

  • 11.0.0: Keyword parameters for text_a and text_b of diff.PatchManagerare deprecated. Positional parameters for by_letter and replace_invisible are deprecated.

Release history

See https://github.com/wikimedia/pywikibot/blob/stable/HISTORY.rst

Contributing

Our code is maintained on Wikimedia’s Gerrit installation, learn how to get started.

Code of Conduct

The development of this software is covered by a Code of Conduct.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pywikibot-11.7.0.tar.gz (651.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pywikibot-11.7.0-py3-none-any.whl (753.9 kB view details)

Uploaded Python 3

File details

Details for the file pywikibot-11.7.0.tar.gz.

File metadata

  • Download URL: pywikibot-11.7.0.tar.gz
  • Upload date:
  • Size: 651.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.15.0a1

File hashes

Hashes for pywikibot-11.7.0.tar.gz
Algorithm Hash digest
SHA256 bd7f4c5b59a20843e46cd5540a03d92922f5db46c9d615ce009ced56a1ef683b
MD5 5d4f600e01793747a47cc44aa2d660f6
BLAKE2b-256 d9d8197b9e216bb52c4cd35c58e8d15ad73ebb3f5ceaa0a6f3698dd0989f16ff

See more details on using hashes here.

File details

Details for the file pywikibot-11.7.0-py3-none-any.whl.

File metadata

  • Download URL: pywikibot-11.7.0-py3-none-any.whl
  • Upload date:
  • Size: 753.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.15.0a1

File hashes

Hashes for pywikibot-11.7.0-py3-none-any.whl
Algorithm Hash digest
SHA256 599a5cba7edcfe290dc9dfb0fde85c37b2f68bb814c762365604d0a7a72eb335
MD5 5231d98a4798d4bfb65bb9d08c266383
BLAKE2b-256 c1ab2244454b34d2bdfedc120d866ffdc95fa4cea062d581e9bc24aa7f32844b

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

11.7.0 This release

2 files

11.6.0

2 files

11.5.0

2 files

11.4.2

2 files

11.4.1

2 files

11.4.0

2 files

11.3.0

2 files

11.2.0

2 files

11.1.0

2 files

11.0.0

2 files

10.7.6

2 files

10.7.5

2 files

10.7.4

2 files

10.7.3

2 files

10.7.2

2 files

10.7.1

2 files

10.7.0

2 files

10.6.0

2 files

10.5.0

2 files

10.4.0

2 files

10.3.2

2 files

10.3.1

2 files

10.3.0

2 files

10.2.0

2 files

10.1.0

2 files

10.0.0

2 files

9.6.3

2 files

9.6.2

2 files

9.6.1

2 files

9.6.0

2 files

9.5.0

2 files

9.4.1

2 files

9.4.0

2 files

9.3.1

2 files

9.3.0

2 files

9.2.1

2 files

9.2.0

2 files

9.1.3

2 files

9.1.2

2 files

9.1.1

2 files

9.1.0

2 files

9.0.0

2 files

8.6.0

2 files

8.5.1

2 files

8.5.0

2 files

8.4.0

2 files

8.3.3

2 files

8.3.2

2 files

8.3.1

2 files

8.3.0

2 files

8.2.0

2 files

8.1.2

2 files

8.1.1

2 files

8.1.0

2 files

8.0.4

1 file

8.0.3

2 files

8.0.2

2 files

8.0.1

2 files

8.0.0

2 files

7.7.3

2 files

7.7.2

2 files

7.7.1

2 files

7.7.0

2 files

7.6.0

2 files

7.5.0

2 files

7.4.0

2 files

7.3.0

1 file

7.2.0

1 file

7.1.0

1 file

7.0.0

1 file

6.6.5

1 file

6.6.4

1 file

6.6.3

1 file

6.6.2

1 file

6.6.1

1 file

6.6.0

1 file

6.5.0

1 file

6.4.0

1 file

6.3.0

1 file

6.2.0

1 file

6.1.0

1 file

6.0.1

1 file

6.0.0

1 file

5.6.0

1 file

5.5.0

1 file

5.4.0

1 file

5.3.0

1 file

5.2.0

1 file

5.1.0

1 file

5.0.0

1 file

4.3.0

1 file

4.2.0

1 file

4.1.1

1 file

4.1.0

1 file

4.0.0

1 file

3.0.20200703

1 file

3.0.20200609

1 file

3.0.20200508

1 file

3.0.20200405

1 file

3.0.20200326

1 file

3.0.20200306

1 file

3.0.20200111

1 file

3.0.20190722

1 file

3.0.20190430

1 file

3.0.20190301

1 file

3.0.20190204

1 file

3.0.20190106

1 file

3.0.20181203

1 file

3.0.20180922

1 file

3.0.20180823

1 file

3.0.20180710

1 file

3.0.20180603

1 file

3.0.20180505

1 file

3.0.20180403

1 file

3.0.20180304

1 file

3.0.20180302

1 file

3.0.20180204

1 file

3.0.20180108

1 file

3.0.20171212

1 file

3.0.20170801

1 file

3.0.20170713

1 file

3.0.20170521

1 file

3.0.20170403

1 file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page