{ "cells": [ { "attachments": {}, "cell_type": "markdown", "id": "36ffdd0e", "metadata": {}, "source": [ "# Tutorial 2: Taxa\n", "[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/pyinat/pyinaturalist/main?filepath=examples%2FTutorial_2_Taxa.ipynb)\n", "\n", "This notebook will give a quick introduction to searching taxa." ] }, { "cell_type": "code", "execution_count": 1, "id": "1b7ffb09", "metadata": {}, "outputs": [], "source": [ "from rich import print\n", "\n", "from pyinaturalist import (\n", " enable_logging,\n", " iNatClient,\n", " pprint,\n", ")\n", "\n", "enable_logging()\n", "client = iNatClient()" ] }, { "attachments": {}, "cell_type": "markdown", "id": "3bd30a71", "metadata": {}, "source": [ "## Basic taxon search\n", "The [taxa search](https://pyinaturalist.readthedocs.io/en/stable/modules/pyinaturalist.controllers.TaxonController.html#pyinaturalist.controllers.TaxonController.search)\n", "can be used to search by name, rank, and several other criteria.\n", "Let's say you partially remember either a genus or family name that started with **'vespi'**-something.\n", "Use the `q` parameter to search by name:" ] }, { "cell_type": "code", "execution_count": 2, "id": "60e719b3", "metadata": {}, "outputs": [], "source": [ "taxa = client.taxa.search(q='vespi', rank=['genus', 'family']).all()" ] }, { "attachments": {}, "cell_type": "markdown", "id": "9dca3b13", "metadata": {}, "source": [ "## Taxon data\n", "As with observations, there is a lot of information in the response:" ] }, { "cell_type": "code", "execution_count": 3, "id": "3f53d34f", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
Taxon(\n",
       "    id=52747,\n",
       "    ancestor_ids=[48460, 1, 47120, 372739, 47158, 184884, 47201, 124417, 326777, 48740, 52747],\n",
       "    extinct=False,\n",
       "    iconic_taxon_id=47158,\n",
       "    iconic_taxon_name='Insecta',\n",
       "    is_active=True,\n",
       "    matched_term='Vespidae',\n",
       "    name='Vespidae',\n",
       "    observations_count=1246088,\n",
       "    parent_id=48740,\n",
       "    preferred_common_name='Hornets, Paper Wasps, Potter Wasps, and Allies',\n",
       "    rank_level=30,\n",
       "    rank='family',\n",
       "    taxon_changes_count=0,\n",
       "    taxon_schemes_count=2,\n",
       "    wikipedia_url='http://en.wikipedia.org/wiki/Vespidae',\n",
       "    ancestors=[],\n",
       "    children=[],\n",
       "    conservation_status=None,\n",
       "    conservation_statuses=[],\n",
       "    default_photo=Photo(\n",
       "        id=26329814,\n",
       "        license_code='CC-BY-SA',\n",
       "        url='https://inaturalist-open-data.s3.amazonaws.com/photos/26329814/square.jpg'\n",
       "    ),\n",
       "    establishment_means=None,\n",
       "    listed_taxa=[],\n",
       "    taxon_photos=[]\n",
       ")\n",
       "
\n" ], "text/plain": [ "\u001b[1;35mTaxon\u001b[0m\u001b[1m(\u001b[0m\n", " \u001b[33mid\u001b[0m=\u001b[1;36m52747\u001b[0m,\n", " \u001b[33mancestor_ids\u001b[0m=\u001b[1m[\u001b[0m\u001b[1;36m48460\u001b[0m, \u001b[1;36m1\u001b[0m, \u001b[1;36m47120\u001b[0m, \u001b[1;36m372739\u001b[0m, \u001b[1;36m47158\u001b[0m, \u001b[1;36m184884\u001b[0m, \u001b[1;36m47201\u001b[0m, \u001b[1;36m124417\u001b[0m, \u001b[1;36m326777\u001b[0m, \u001b[1;36m48740\u001b[0m, \u001b[1;36m52747\u001b[0m\u001b[1m]\u001b[0m,\n", " \u001b[33mextinct\u001b[0m=\u001b[3;91mFalse\u001b[0m,\n", " \u001b[33miconic_taxon_id\u001b[0m=\u001b[1;36m47158\u001b[0m,\n", " \u001b[33miconic_taxon_name\u001b[0m=\u001b[32m'Insecta'\u001b[0m,\n", " \u001b[33mis_active\u001b[0m=\u001b[3;92mTrue\u001b[0m,\n", " \u001b[33mmatched_term\u001b[0m=\u001b[32m'Vespidae'\u001b[0m,\n", " \u001b[33mname\u001b[0m=\u001b[32m'Vespidae'\u001b[0m,\n", " \u001b[33mobservations_count\u001b[0m=\u001b[1;36m1246088\u001b[0m,\n", " \u001b[33mparent_id\u001b[0m=\u001b[1;36m48740\u001b[0m,\n", " \u001b[33mpreferred_common_name\u001b[0m=\u001b[32m'Hornets, Paper Wasps, Potter Wasps, and Allies'\u001b[0m,\n", " \u001b[33mrank_level\u001b[0m=\u001b[1;36m30\u001b[0m,\n", " \u001b[33mrank\u001b[0m=\u001b[32m'family'\u001b[0m,\n", " \u001b[33mtaxon_changes_count\u001b[0m=\u001b[1;36m0\u001b[0m,\n", " \u001b[33mtaxon_schemes_count\u001b[0m=\u001b[1;36m2\u001b[0m,\n", " \u001b[33mwikipedia_url\u001b[0m=\u001b[32m'http://en.wikipedia.org/wiki/Vespidae'\u001b[0m,\n", " \u001b[33mancestors\u001b[0m=\u001b[1m[\u001b[0m\u001b[1m]\u001b[0m,\n", " \u001b[33mchildren\u001b[0m=\u001b[1m[\u001b[0m\u001b[1m]\u001b[0m,\n", " \u001b[33mconservation_status\u001b[0m=\u001b[3;35mNone\u001b[0m,\n", " \u001b[33mconservation_statuses\u001b[0m=\u001b[1m[\u001b[0m\u001b[1m]\u001b[0m,\n", " \u001b[33mdefault_photo\u001b[0m=\u001b[1;35mPhoto\u001b[0m\u001b[1m(\u001b[0m\n", " \u001b[33mid\u001b[0m=\u001b[1;36m26329814\u001b[0m,\n", " \u001b[33mlicense_code\u001b[0m=\u001b[32m'CC-BY-SA'\u001b[0m,\n", " \u001b[33murl\u001b[0m=\u001b[32m'https://inaturalist-open-data.s3.amazonaws.com/photos/26329814/square.jpg'\u001b[0m\n", " \u001b[1m)\u001b[0m,\n", " \u001b[33mestablishment_means\u001b[0m=\u001b[3;35mNone\u001b[0m,\n", " \u001b[33mlisted_taxa\u001b[0m=\u001b[1m[\u001b[0m\u001b[1m]\u001b[0m,\n", " \u001b[33mtaxon_photos\u001b[0m=\u001b[1m[\u001b[0m\u001b[1m]\u001b[0m\n", "\u001b[1m)\u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "print(taxa[0])" ] }, { "attachments": {}, "cell_type": "markdown", "id": "4020d25d", "metadata": {}, "source": [ "## Previewing data\n", "And we can get a condensed preview with `pprint()`:" ] }, { "cell_type": "code", "execution_count": 4, "id": "2cb9732e", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
                                                                                        \n",
       "  ID        Rank     Scientific name    Common name                                     \n",
       " ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ \n",
       "  52747     family   🐝 Vespidae        Hornets, Paper Wasps, Potter Wasps, and Allies  \n",
       "  1312989   genus    🐠 Trichosomus                                                     \n",
       "  84737     genus    🦋 Vespina                                                         \n",
       "  250566    genus    🐝 Vespita                                                         \n",
       "  646195    genus    🪰 Vespiodes                                                       \n",
       "  1399531   genus    🪲 Vespinitocris                                                   \n",
       "  1007575   genus    🦋 Vespitinea                                                      \n",
       "                                                                                        \n",
       "
\n" ], "text/plain": [ " \n", " \u001b[1;37m \u001b[0m\u001b[1;37mID \u001b[0m\u001b[1;37m \u001b[0m \u001b[1;37m \u001b[0m\u001b[1;37mRank \u001b[0m\u001b[1;37m \u001b[0m \u001b[1;37m \u001b[0m\u001b[1;37mScientific name \u001b[0m\u001b[1;37m \u001b[0m \u001b[1;37m \u001b[0m\u001b[1;37mCommon name \u001b[0m\u001b[1;37m \u001b[0m \n", " ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ \n", " \u001b[2;36m \u001b[0m\u001b[2;36m52747 \u001b[0m\u001b[2;36m \u001b[0m \u001b[2;38;5;177m \u001b[0m\u001b[2;38;5;177mfamily\u001b[0m\u001b[2;38;5;177m \u001b[0m \u001b[2;32m \u001b[0m\u001b[2;32m🐝 Vespidae \u001b[0m\u001b[2;32m \u001b[0m \u001b[2;34m \u001b[0m\u001b[2;34mHornets, Paper Wasps, Potter Wasps, and Allies\u001b[0m\u001b[2;34m \u001b[0m \n", " \u001b[36m \u001b[0m\u001b[36m1312989\u001b[0m\u001b[36m \u001b[0m \u001b[38;5;177m \u001b[0m\u001b[38;5;177mgenus \u001b[0m\u001b[38;5;177m \u001b[0m \u001b[32m \u001b[0m\u001b[32m🐠 Trichosomus \u001b[0m\u001b[32m \u001b[0m \u001b[34m \u001b[0m\u001b[34m \u001b[0m\u001b[34m \u001b[0m \n", " \u001b[2;36m \u001b[0m\u001b[2;36m84737 \u001b[0m\u001b[2;36m \u001b[0m \u001b[2;38;5;177m \u001b[0m\u001b[2;38;5;177mgenus \u001b[0m\u001b[2;38;5;177m \u001b[0m \u001b[2;32m \u001b[0m\u001b[2;32m🦋 Vespina \u001b[0m\u001b[2;32m \u001b[0m \u001b[2;34m \u001b[0m\u001b[2;34m \u001b[0m\u001b[2;34m \u001b[0m \n", " \u001b[36m \u001b[0m\u001b[36m250566 \u001b[0m\u001b[36m \u001b[0m \u001b[38;5;177m \u001b[0m\u001b[38;5;177mgenus \u001b[0m\u001b[38;5;177m \u001b[0m \u001b[32m \u001b[0m\u001b[32m🐝 Vespita \u001b[0m\u001b[32m \u001b[0m \u001b[34m \u001b[0m\u001b[34m \u001b[0m\u001b[34m \u001b[0m \n", " \u001b[2;36m \u001b[0m\u001b[2;36m646195 \u001b[0m\u001b[2;36m \u001b[0m \u001b[2;38;5;177m \u001b[0m\u001b[2;38;5;177mgenus \u001b[0m\u001b[2;38;5;177m \u001b[0m \u001b[2;32m \u001b[0m\u001b[2;32m🪰 Vespiodes \u001b[0m\u001b[2;32m \u001b[0m \u001b[2;34m \u001b[0m\u001b[2;34m \u001b[0m\u001b[2;34m \u001b[0m \n", " \u001b[36m \u001b[0m\u001b[36m1399531\u001b[0m\u001b[36m \u001b[0m \u001b[38;5;177m \u001b[0m\u001b[38;5;177mgenus \u001b[0m\u001b[38;5;177m \u001b[0m \u001b[32m \u001b[0m\u001b[32m🪲 Vespinitocris\u001b[0m\u001b[32m \u001b[0m \u001b[34m \u001b[0m\u001b[34m \u001b[0m\u001b[34m \u001b[0m \n", " \u001b[2;36m \u001b[0m\u001b[2;36m1007575\u001b[0m\u001b[2;36m \u001b[0m \u001b[2;38;5;177m \u001b[0m\u001b[2;38;5;177mgenus \u001b[0m\u001b[2;38;5;177m \u001b[0m \u001b[2;32m \u001b[0m\u001b[2;32m🦋 Vespitinea \u001b[0m\u001b[2;32m \u001b[0m \u001b[2;34m \u001b[0m\u001b[2;34m \u001b[0m\u001b[2;34m \u001b[0m \n", " \n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "pprint(taxa)" ] }, { "attachments": {}, "cell_type": "markdown", "id": "b9767ea3", "metadata": {}, "source": [ "## Searching by parent ID\n", "Oh, that's right, it was **'Vespidae'**! Now let's find all of its subfamilies.\n", "We can run another search by parent ID, using the taxon ID from the results above:" ] }, { "cell_type": "code", "execution_count": 5, "id": "1ea4e154", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
                                                                       \n",
       "  ID        Rank        Scientific name     Common name                \n",
       " ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ \n",
       "  343248    subfamily   🐝 Polistinae       Paper Wasps                \n",
       "  84738     subfamily   🐝 Vespinae         Hornets and Yellowjackets  \n",
       "  119344    subfamily   🐝 Eumeninae        Potter and Mason Wasps     \n",
       "  121511    subfamily   🐝 Masarinae        Pollen Wasps               \n",
       "  522215    subfamily   🐝 Stenogastrinae   Hover Wasps                \n",
       "  343388    subfamily   🐝 Euparagiinae                                \n",
       "  1633740   genus       🐝 Ischnogaster                                \n",
       "                                                                       \n",
       "
\n" ], "text/plain": [ " \n", " \u001b[1;37m \u001b[0m\u001b[1;37mID \u001b[0m\u001b[1;37m \u001b[0m \u001b[1;37m \u001b[0m\u001b[1;37mRank \u001b[0m\u001b[1;37m \u001b[0m \u001b[1;37m \u001b[0m\u001b[1;37mScientific name \u001b[0m\u001b[1;37m \u001b[0m \u001b[1;37m \u001b[0m\u001b[1;37mCommon name \u001b[0m\u001b[1;37m \u001b[0m \n", " ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ \n", " \u001b[2;36m \u001b[0m\u001b[2;36m343248 \u001b[0m\u001b[2;36m \u001b[0m \u001b[2;38;5;177m \u001b[0m\u001b[2;38;5;177msubfamily\u001b[0m\u001b[2;38;5;177m \u001b[0m \u001b[2;32m \u001b[0m\u001b[2;32m🐝 Polistinae \u001b[0m\u001b[2;32m \u001b[0m \u001b[2;34m \u001b[0m\u001b[2;34mPaper Wasps \u001b[0m\u001b[2;34m \u001b[0m \n", " \u001b[36m \u001b[0m\u001b[36m84738 \u001b[0m\u001b[36m \u001b[0m \u001b[38;5;177m \u001b[0m\u001b[38;5;177msubfamily\u001b[0m\u001b[38;5;177m \u001b[0m \u001b[32m \u001b[0m\u001b[32m🐝 Vespinae \u001b[0m\u001b[32m \u001b[0m \u001b[34m \u001b[0m\u001b[34mHornets and Yellowjackets\u001b[0m\u001b[34m \u001b[0m \n", " \u001b[2;36m \u001b[0m\u001b[2;36m119344 \u001b[0m\u001b[2;36m \u001b[0m \u001b[2;38;5;177m \u001b[0m\u001b[2;38;5;177msubfamily\u001b[0m\u001b[2;38;5;177m \u001b[0m \u001b[2;32m \u001b[0m\u001b[2;32m🐝 Eumeninae \u001b[0m\u001b[2;32m \u001b[0m \u001b[2;34m \u001b[0m\u001b[2;34mPotter and Mason Wasps \u001b[0m\u001b[2;34m \u001b[0m \n", " \u001b[36m \u001b[0m\u001b[36m121511 \u001b[0m\u001b[36m \u001b[0m \u001b[38;5;177m \u001b[0m\u001b[38;5;177msubfamily\u001b[0m\u001b[38;5;177m \u001b[0m \u001b[32m \u001b[0m\u001b[32m🐝 Masarinae \u001b[0m\u001b[32m \u001b[0m \u001b[34m \u001b[0m\u001b[34mPollen Wasps \u001b[0m\u001b[34m \u001b[0m \n", " \u001b[2;36m \u001b[0m\u001b[2;36m522215 \u001b[0m\u001b[2;36m \u001b[0m \u001b[2;38;5;177m \u001b[0m\u001b[2;38;5;177msubfamily\u001b[0m\u001b[2;38;5;177m \u001b[0m \u001b[2;32m \u001b[0m\u001b[2;32m🐝 Stenogastrinae\u001b[0m\u001b[2;32m \u001b[0m \u001b[2;34m \u001b[0m\u001b[2;34mHover Wasps \u001b[0m\u001b[2;34m \u001b[0m \n", " \u001b[36m \u001b[0m\u001b[36m343388 \u001b[0m\u001b[36m \u001b[0m \u001b[38;5;177m \u001b[0m\u001b[38;5;177msubfamily\u001b[0m\u001b[38;5;177m \u001b[0m \u001b[32m \u001b[0m\u001b[32m🐝 Euparagiinae \u001b[0m\u001b[32m \u001b[0m \u001b[34m \u001b[0m\u001b[34m \u001b[0m\u001b[34m \u001b[0m \n", " \u001b[2;36m \u001b[0m\u001b[2;36m1633740\u001b[0m\u001b[2;36m \u001b[0m \u001b[2;38;5;177m \u001b[0m\u001b[2;38;5;177mgenus \u001b[0m\u001b[2;38;5;177m \u001b[0m \u001b[2;32m \u001b[0m\u001b[2;32m🐝 Ischnogaster \u001b[0m\u001b[2;32m \u001b[0m \u001b[2;34m \u001b[0m\u001b[2;34m \u001b[0m\u001b[2;34m \u001b[0m \n", " \n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "subfamilies = client.taxa.search(parent_id=52747).all()\n", "pprint(subfamilies)" ] }, { "cell_type": "markdown", "id": "45d02c45", "metadata": {}, "source": [ "## Autocomplete search\n", "There is a [taxon autocomplete](https://pyinaturalist.readthedocs.io/en/stable/modules/pyinaturalist.controllers.TaxonController.html#pyinaturalist.controllers.TaxonController.autocomplete)\n", "text search endpoint, which is intended for autocomplete interfaces like the one on iNaturalist.org:\n", "\n", "![Taxon autocompletion on iNaturalist.org](images/inat-taxon-autocomplete.png)\n", "\n", "But it also provides an easy way to search the iNaturalist taxonomy database by taxon name.\n", "Here is a quick example that will run searches from console input. Try a few different searches:" ] }, { "cell_type": "code", "execution_count": 6, "id": "d75328ba", "metadata": {}, "outputs": [ { "name": "stdin", "output_type": "stream", "text": [ "> opilio\n" ] }, { "data": { "text/html": [ "
                                                                                 \n",
       "  ID        Rank        Scientific name              Common name                 \n",
       " ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ \n",
       "  527573    genus       🕷️ Opilio                                                \n",
       "  47367     order       🕷️ Opiliones                 Harvestmen                  \n",
       "  84644     species     🕷️ Phalangium opilio         European Harvestman         \n",
       "  527419    subfamily   🕷️ Opilioninae                                           \n",
       "  527576    species     🕷️ Opilio canestrinii        Canestrini's Harvestman     \n",
       "  541903    species     🕷️ Pholcus opilionoides      Opilion-like Cellar Spider  \n",
       "  488349    species     🕷️ Rilaena triangularis      Spring Harvestman           \n",
       "  527483    species     🕷️ Paroligolophus agrestis                               \n",
       "  527479    species     🕷️ Oligolophus tridens                                   \n",
       "  1500492   tribe       🕷️ Opilionini                                            \n",
       "  57325     family      🕷️ Sclerosomatidae           Sclerosomatid Harvestmen    \n",
       "  527578    species     🕷️ Opilio saxatilis                                      \n",
       "  533285    subfamily   🕷️ Leiobuninae                                           \n",
       "  527577    species     🕷️ Opilio parietinus                                     \n",
       "  144132    order       🕷️ Opilioacarida                                         \n",
       "  245164    family      🕷️ Opilioacaridae                                        \n",
       "  57396     species     🕷️ Dicranopalpus ramosus     Fork-palped Harvestman      \n",
       "  324310    species     🕷️ Mitopus morio             Saddleback Harvestman       \n",
       "  527919    species     🕷️ Opilio transversalis                                  \n",
       "  527574    species     🕷️ Opilio ruzickai                                       \n",
       "  71583     family      🌱 Opiliaceae                opilia family               \n",
       "  527575    species     🕷️ Opilio dinaricus                                      \n",
       "  527798    species     🕷️ Odiellus spinosus                                     \n",
       "  249965    genus       🕷️ Opilioacarus                                          \n",
       "  297844    species     🕷️ Opilioacarus texanus                                  \n",
       "  525996    species     🕷️ Leiobunum limbatum                                    \n",
       "  527732    species     🕷️ Lacinius dentiger                                     \n",
       "  262076    species     🕷️ Diguetinus raptator                                   \n",
       "  249258    genus       🕷️ Paranelima                                            \n",
       "  527905    species     🕷️ Opilio insulae                                        \n",
       "                                                                                 \n",
       "
\n" ], "text/plain": [ " \n", " \u001b[1;37m \u001b[0m\u001b[1;37mID \u001b[0m\u001b[1;37m \u001b[0m \u001b[1;37m \u001b[0m\u001b[1;37mRank \u001b[0m\u001b[1;37m \u001b[0m \u001b[1;37m \u001b[0m\u001b[1;37mScientific name \u001b[0m\u001b[1;37m \u001b[0m \u001b[1;37m \u001b[0m\u001b[1;37mCommon name \u001b[0m\u001b[1;37m \u001b[0m \n", " ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ \n", " \u001b[2;36m \u001b[0m\u001b[2;36m527573 \u001b[0m\u001b[2;36m \u001b[0m \u001b[2;38;5;177m \u001b[0m\u001b[2;38;5;177mgenus \u001b[0m\u001b[2;38;5;177m \u001b[0m \u001b[2;32m \u001b[0m\u001b[2;32m🕷️ Opilio \u001b[0m\u001b[2;32m \u001b[0m \u001b[2;34m \u001b[0m\u001b[2;34m \u001b[0m\u001b[2;34m \u001b[0m \n", " \u001b[36m \u001b[0m\u001b[36m47367 \u001b[0m\u001b[36m \u001b[0m \u001b[38;5;177m \u001b[0m\u001b[38;5;177morder \u001b[0m\u001b[38;5;177m \u001b[0m \u001b[32m \u001b[0m\u001b[32m🕷️ Opiliones \u001b[0m\u001b[32m \u001b[0m \u001b[34m \u001b[0m\u001b[34mHarvestmen \u001b[0m\u001b[34m \u001b[0m \n", " \u001b[2;36m \u001b[0m\u001b[2;36m84644 \u001b[0m\u001b[2;36m \u001b[0m \u001b[2;38;5;177m \u001b[0m\u001b[2;38;5;177mspecies \u001b[0m\u001b[2;38;5;177m \u001b[0m \u001b[2;32m \u001b[0m\u001b[2;32m🕷️ Phalangium opilio \u001b[0m\u001b[2;32m \u001b[0m \u001b[2;34m \u001b[0m\u001b[2;34mEuropean Harvestman \u001b[0m\u001b[2;34m \u001b[0m \n", " \u001b[36m \u001b[0m\u001b[36m527419 \u001b[0m\u001b[36m \u001b[0m \u001b[38;5;177m \u001b[0m\u001b[38;5;177msubfamily\u001b[0m\u001b[38;5;177m \u001b[0m \u001b[32m \u001b[0m\u001b[32m🕷️ Opilioninae \u001b[0m\u001b[32m \u001b[0m \u001b[34m \u001b[0m\u001b[34m \u001b[0m\u001b[34m \u001b[0m \n", " \u001b[2;36m \u001b[0m\u001b[2;36m527576 \u001b[0m\u001b[2;36m \u001b[0m \u001b[2;38;5;177m \u001b[0m\u001b[2;38;5;177mspecies \u001b[0m\u001b[2;38;5;177m \u001b[0m \u001b[2;32m \u001b[0m\u001b[2;32m🕷️ Opilio canestrinii \u001b[0m\u001b[2;32m \u001b[0m \u001b[2;34m \u001b[0m\u001b[2;34mCanestrini's Harvestman \u001b[0m\u001b[2;34m \u001b[0m \n", " \u001b[36m \u001b[0m\u001b[36m541903 \u001b[0m\u001b[36m \u001b[0m \u001b[38;5;177m \u001b[0m\u001b[38;5;177mspecies \u001b[0m\u001b[38;5;177m \u001b[0m \u001b[32m \u001b[0m\u001b[32m🕷️ Pholcus opilionoides \u001b[0m\u001b[32m \u001b[0m \u001b[34m \u001b[0m\u001b[34mOpilion-like Cellar Spider\u001b[0m\u001b[34m \u001b[0m \n", " \u001b[2;36m \u001b[0m\u001b[2;36m488349 \u001b[0m\u001b[2;36m \u001b[0m \u001b[2;38;5;177m \u001b[0m\u001b[2;38;5;177mspecies \u001b[0m\u001b[2;38;5;177m \u001b[0m \u001b[2;32m \u001b[0m\u001b[2;32m🕷️ Rilaena triangularis \u001b[0m\u001b[2;32m \u001b[0m \u001b[2;34m \u001b[0m\u001b[2;34mSpring Harvestman \u001b[0m\u001b[2;34m \u001b[0m \n", " \u001b[36m \u001b[0m\u001b[36m527483 \u001b[0m\u001b[36m \u001b[0m \u001b[38;5;177m \u001b[0m\u001b[38;5;177mspecies \u001b[0m\u001b[38;5;177m \u001b[0m \u001b[32m \u001b[0m\u001b[32m🕷️ Paroligolophus agrestis\u001b[0m\u001b[32m \u001b[0m \u001b[34m \u001b[0m\u001b[34m \u001b[0m\u001b[34m \u001b[0m \n", " \u001b[2;36m \u001b[0m\u001b[2;36m527479 \u001b[0m\u001b[2;36m \u001b[0m \u001b[2;38;5;177m \u001b[0m\u001b[2;38;5;177mspecies \u001b[0m\u001b[2;38;5;177m \u001b[0m \u001b[2;32m \u001b[0m\u001b[2;32m🕷️ Oligolophus tridens \u001b[0m\u001b[2;32m \u001b[0m \u001b[2;34m \u001b[0m\u001b[2;34m \u001b[0m\u001b[2;34m \u001b[0m \n", " \u001b[36m \u001b[0m\u001b[36m1500492\u001b[0m\u001b[36m \u001b[0m \u001b[38;5;177m \u001b[0m\u001b[38;5;177mtribe \u001b[0m\u001b[38;5;177m \u001b[0m \u001b[32m \u001b[0m\u001b[32m🕷️ Opilionini \u001b[0m\u001b[32m \u001b[0m \u001b[34m \u001b[0m\u001b[34m \u001b[0m\u001b[34m \u001b[0m \n", " \u001b[2;36m \u001b[0m\u001b[2;36m57325 \u001b[0m\u001b[2;36m \u001b[0m \u001b[2;38;5;177m \u001b[0m\u001b[2;38;5;177mfamily \u001b[0m\u001b[2;38;5;177m \u001b[0m \u001b[2;32m \u001b[0m\u001b[2;32m🕷️ Sclerosomatidae \u001b[0m\u001b[2;32m \u001b[0m \u001b[2;34m \u001b[0m\u001b[2;34mSclerosomatid Harvestmen \u001b[0m\u001b[2;34m \u001b[0m \n", " \u001b[36m \u001b[0m\u001b[36m527578 \u001b[0m\u001b[36m \u001b[0m \u001b[38;5;177m \u001b[0m\u001b[38;5;177mspecies \u001b[0m\u001b[38;5;177m \u001b[0m \u001b[32m \u001b[0m\u001b[32m🕷️ Opilio saxatilis \u001b[0m\u001b[32m \u001b[0m \u001b[34m \u001b[0m\u001b[34m \u001b[0m\u001b[34m \u001b[0m \n", " \u001b[2;36m \u001b[0m\u001b[2;36m533285 \u001b[0m\u001b[2;36m \u001b[0m \u001b[2;38;5;177m \u001b[0m\u001b[2;38;5;177msubfamily\u001b[0m\u001b[2;38;5;177m \u001b[0m \u001b[2;32m \u001b[0m\u001b[2;32m🕷️ Leiobuninae \u001b[0m\u001b[2;32m \u001b[0m \u001b[2;34m \u001b[0m\u001b[2;34m \u001b[0m\u001b[2;34m \u001b[0m \n", " \u001b[36m \u001b[0m\u001b[36m527577 \u001b[0m\u001b[36m \u001b[0m \u001b[38;5;177m \u001b[0m\u001b[38;5;177mspecies \u001b[0m\u001b[38;5;177m \u001b[0m \u001b[32m \u001b[0m\u001b[32m🕷️ Opilio parietinus \u001b[0m\u001b[32m \u001b[0m \u001b[34m \u001b[0m\u001b[34m \u001b[0m\u001b[34m \u001b[0m \n", " \u001b[2;36m \u001b[0m\u001b[2;36m144132 \u001b[0m\u001b[2;36m \u001b[0m \u001b[2;38;5;177m \u001b[0m\u001b[2;38;5;177morder \u001b[0m\u001b[2;38;5;177m \u001b[0m \u001b[2;32m \u001b[0m\u001b[2;32m🕷️ Opilioacarida \u001b[0m\u001b[2;32m \u001b[0m \u001b[2;34m \u001b[0m\u001b[2;34m \u001b[0m\u001b[2;34m \u001b[0m \n", " \u001b[36m \u001b[0m\u001b[36m245164 \u001b[0m\u001b[36m \u001b[0m \u001b[38;5;177m \u001b[0m\u001b[38;5;177mfamily \u001b[0m\u001b[38;5;177m \u001b[0m \u001b[32m \u001b[0m\u001b[32m🕷️ Opilioacaridae \u001b[0m\u001b[32m \u001b[0m \u001b[34m \u001b[0m\u001b[34m \u001b[0m\u001b[34m \u001b[0m \n", " \u001b[2;36m \u001b[0m\u001b[2;36m57396 \u001b[0m\u001b[2;36m \u001b[0m \u001b[2;38;5;177m \u001b[0m\u001b[2;38;5;177mspecies \u001b[0m\u001b[2;38;5;177m \u001b[0m \u001b[2;32m \u001b[0m\u001b[2;32m🕷️ Dicranopalpus ramosus \u001b[0m\u001b[2;32m \u001b[0m \u001b[2;34m \u001b[0m\u001b[2;34mFork-palped Harvestman \u001b[0m\u001b[2;34m \u001b[0m \n", " \u001b[36m \u001b[0m\u001b[36m324310 \u001b[0m\u001b[36m \u001b[0m \u001b[38;5;177m \u001b[0m\u001b[38;5;177mspecies \u001b[0m\u001b[38;5;177m \u001b[0m \u001b[32m \u001b[0m\u001b[32m🕷️ Mitopus morio \u001b[0m\u001b[32m \u001b[0m \u001b[34m \u001b[0m\u001b[34mSaddleback Harvestman \u001b[0m\u001b[34m \u001b[0m \n", " \u001b[2;36m \u001b[0m\u001b[2;36m527919 \u001b[0m\u001b[2;36m \u001b[0m \u001b[2;38;5;177m \u001b[0m\u001b[2;38;5;177mspecies \u001b[0m\u001b[2;38;5;177m \u001b[0m \u001b[2;32m \u001b[0m\u001b[2;32m🕷️ Opilio transversalis \u001b[0m\u001b[2;32m \u001b[0m \u001b[2;34m \u001b[0m\u001b[2;34m \u001b[0m\u001b[2;34m \u001b[0m \n", " \u001b[36m \u001b[0m\u001b[36m527574 \u001b[0m\u001b[36m \u001b[0m \u001b[38;5;177m \u001b[0m\u001b[38;5;177mspecies \u001b[0m\u001b[38;5;177m \u001b[0m \u001b[32m \u001b[0m\u001b[32m🕷️ Opilio ruzickai \u001b[0m\u001b[32m \u001b[0m \u001b[34m \u001b[0m\u001b[34m \u001b[0m\u001b[34m \u001b[0m \n", " \u001b[2;36m \u001b[0m\u001b[2;36m71583 \u001b[0m\u001b[2;36m \u001b[0m \u001b[2;38;5;177m \u001b[0m\u001b[2;38;5;177mfamily \u001b[0m\u001b[2;38;5;177m \u001b[0m \u001b[2;32m \u001b[0m\u001b[2;32m🌱 Opiliaceae \u001b[0m\u001b[2;32m \u001b[0m \u001b[2;34m \u001b[0m\u001b[2;34mopilia family \u001b[0m\u001b[2;34m \u001b[0m \n", " \u001b[36m \u001b[0m\u001b[36m527575 \u001b[0m\u001b[36m \u001b[0m \u001b[38;5;177m \u001b[0m\u001b[38;5;177mspecies \u001b[0m\u001b[38;5;177m \u001b[0m \u001b[32m \u001b[0m\u001b[32m🕷️ Opilio dinaricus \u001b[0m\u001b[32m \u001b[0m \u001b[34m \u001b[0m\u001b[34m \u001b[0m\u001b[34m \u001b[0m \n", " \u001b[2;36m \u001b[0m\u001b[2;36m527798 \u001b[0m\u001b[2;36m \u001b[0m \u001b[2;38;5;177m \u001b[0m\u001b[2;38;5;177mspecies \u001b[0m\u001b[2;38;5;177m \u001b[0m \u001b[2;32m \u001b[0m\u001b[2;32m🕷️ Odiellus spinosus \u001b[0m\u001b[2;32m \u001b[0m \u001b[2;34m \u001b[0m\u001b[2;34m \u001b[0m\u001b[2;34m \u001b[0m \n", " \u001b[36m \u001b[0m\u001b[36m249965 \u001b[0m\u001b[36m \u001b[0m \u001b[38;5;177m \u001b[0m\u001b[38;5;177mgenus \u001b[0m\u001b[38;5;177m \u001b[0m \u001b[32m \u001b[0m\u001b[32m🕷️ Opilioacarus \u001b[0m\u001b[32m \u001b[0m \u001b[34m \u001b[0m\u001b[34m \u001b[0m\u001b[34m \u001b[0m \n", " \u001b[2;36m \u001b[0m\u001b[2;36m297844 \u001b[0m\u001b[2;36m \u001b[0m \u001b[2;38;5;177m \u001b[0m\u001b[2;38;5;177mspecies \u001b[0m\u001b[2;38;5;177m \u001b[0m \u001b[2;32m \u001b[0m\u001b[2;32m🕷️ Opilioacarus texanus \u001b[0m\u001b[2;32m \u001b[0m \u001b[2;34m \u001b[0m\u001b[2;34m \u001b[0m\u001b[2;34m \u001b[0m \n", " \u001b[36m \u001b[0m\u001b[36m525996 \u001b[0m\u001b[36m \u001b[0m \u001b[38;5;177m \u001b[0m\u001b[38;5;177mspecies \u001b[0m\u001b[38;5;177m \u001b[0m \u001b[32m \u001b[0m\u001b[32m🕷️ Leiobunum limbatum \u001b[0m\u001b[32m \u001b[0m \u001b[34m \u001b[0m\u001b[34m \u001b[0m\u001b[34m \u001b[0m \n", " \u001b[2;36m \u001b[0m\u001b[2;36m527732 \u001b[0m\u001b[2;36m \u001b[0m \u001b[2;38;5;177m \u001b[0m\u001b[2;38;5;177mspecies \u001b[0m\u001b[2;38;5;177m \u001b[0m \u001b[2;32m \u001b[0m\u001b[2;32m🕷️ Lacinius dentiger \u001b[0m\u001b[2;32m \u001b[0m \u001b[2;34m \u001b[0m\u001b[2;34m \u001b[0m\u001b[2;34m \u001b[0m \n", " \u001b[36m \u001b[0m\u001b[36m262076 \u001b[0m\u001b[36m \u001b[0m \u001b[38;5;177m \u001b[0m\u001b[38;5;177mspecies \u001b[0m\u001b[38;5;177m \u001b[0m \u001b[32m \u001b[0m\u001b[32m🕷️ Diguetinus raptator \u001b[0m\u001b[32m \u001b[0m \u001b[34m \u001b[0m\u001b[34m \u001b[0m\u001b[34m \u001b[0m \n", " \u001b[2;36m \u001b[0m\u001b[2;36m249258 \u001b[0m\u001b[2;36m \u001b[0m \u001b[2;38;5;177m \u001b[0m\u001b[2;38;5;177mgenus \u001b[0m\u001b[2;38;5;177m \u001b[0m \u001b[2;32m \u001b[0m\u001b[2;32m🕷️ Paranelima \u001b[0m\u001b[2;32m \u001b[0m \u001b[2;34m \u001b[0m\u001b[2;34m \u001b[0m\u001b[2;34m \u001b[0m \n", " \u001b[36m \u001b[0m\u001b[36m527905 \u001b[0m\u001b[36m \u001b[0m \u001b[38;5;177m \u001b[0m\u001b[38;5;177mspecies \u001b[0m\u001b[38;5;177m \u001b[0m \u001b[32m \u001b[0m\u001b[32m🕷️ Opilio insulae \u001b[0m\u001b[32m \u001b[0m \u001b[34m \u001b[0m\u001b[34m \u001b[0m\u001b[34m \u001b[0m \n", " \n" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdin", "output_type": "stream", "text": [ "> exit\n" ] } ], "source": [ "while True:\n", " query = input('> ')\n", " if query == 'exit':\n", " break\n", " results = client.taxa.autocomplete(q=query).all()\n", " pprint(results)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.13.12" } }, "nbformat": 4, "nbformat_minor": 5 }