mtg_parser
is a Python library to download and parse Magic The Gathering decklists. It supports the most popular decklists hosting websites.
The following section covers the installation of mtg_parser
.
The following section covers the installation of mtg_parser
.
Before using mtg_parser
, you will need:
python >= 3.8.1
To install mtg_parser
, simply run one of the following commands in the terminal of your choice:
$ pip install mtg-parser
or
$ poetry add mtg-parser
In addition to MTGO and MTGA formats, mtg_parser
supports the following websites:
- aetherhub.com
- archidekt.com
- deckstats.net
- moxfield.com
- mtggoldfish.com
- mtgjson.com
- scryfall.com
- tappedout.net
- tcgplayer.com
moxfield.com prevents the scraping of their website (it's against their Terms of Service). Please contact support@moxfield.com if you want to proceed anyway.
Start by importing the mtg_parser
module:
import mtg_parser
Now let's parse a decklist (in any of the supported formats) and display the cards:
cards = mtg_parser.parse_deck(url)
for card in cards:
print(card)
mtg_parser.parse_deck()
is a shortcut method to the specialized versions.
Provided that url
is a valid Moxfield url, the following lines are equivalent:
cards = mtg_parser.parse_deck(url)
# is the same as:
cards = mtg_parser.moxfield.parse_deck(url)
In general, it's advised to use mtg_parser.parse_deck()
as the overhead is insignificant.
If for any reason, you need to configure how mtg_parser
is fetching remote decklists, you can provide an optional requests.Session
object.
from requests import Session
s = Session()
# Configure your session here
cards = mtg_parser.parse_deck(url, session=s)
for card in cards:
print(card)
mtg_parser
can parse textual decklists in either MTGO or MTGA format
import mtg_parser
decklist = """
1 Atraxa, Praetors' Voice
1 Imperial Seal
1 Lim-Dûl's Vault
1 Jeweled Lotus (CMR) 319
1 Llanowar Elves (M12) 182
3 Brainstorm #Card Advantage #Draw
"""
cards = mtg_parser.decklist.parse_deck(deck_list)
for card in cards:
print(card)
mtg_parser
can parse public decks from aetherhub.com
import mtg_parser
url = 'https://aetherhub.com/Deck/<deck_name>'
cards = mtg_parser.aetherhub.parse_deck(url)
for card in cards:
print(card)
mtg_parser
can parse public decks from archidekt.com
import mtg_parser
url = 'https://www.archidekt.com/decks/<deck_id>/'
cards = mtg_parser.archidekt.parse_deck(url)
for card in cards:
print(card)
mtg_parser
can parse public decks from deckstats.net
import mtg_parser
url = 'https://deckstats.net/decks/<userid>/<deck_id>'
cards = mtg_parser.deckstats.parse_deck(url)
for card in cards:
print(card)
mtg_parser
can parse public decks from moxfield.com
import mtg_parser
url = 'https://www.moxfield.com/decks/<deck_id>'
cards = mtg_parser.moxfield.parse_deck(url)
for card in cards:
print(card)
mtg_parser
can parse public decks from mtggoldfish.com
import mtg_parser
url = 'https://www.mtggoldfish.com/deck/<deck_id>'
cards = mtg_parser.mtggoldfish.parse_deck(url)
for card in cards:
print(card)
mtg_parser
can parse decks from mtgjson.com
import mtg_parser
url = 'https://mtgjson.com/api/v5/decks/<deck_name>.json'
cards = mtg_parser.mtgjson.parse_deck(url)
for card in cards:
print(card)
mtg_parser
can parse public decks from scryfall.com
import mtg_parser
url = 'https://scryfall.com/<userid>/decks/<deck_id>/'
cards = mtg_parser.scryfall.parse_deck(url)
for card in cards:
print(card)
mtg_parser
can parse public decks from tappedout.net
import mtg_parser
url = 'https://tappedout.net/mtg-decks/<deck_id>/'
cards = mtg_parser.tappedout.parse_deck(url)
for card in cards:
print(card)
mtg_parser
can parse public decks from tcgplayer.com
import mtg_parser
url = 'https://decks.tcgplayer.com/magic/<deck_path>'
cards = mtg_parser.tcgplayer.parse_deck(url)
for card in cards:
print(card)