{"id":20971320,"url":"https://github.com/amanoteam/duckpy","last_synced_at":"2026-04-03T10:33:50.753Z","repository":{"id":33235576,"uuid":"156642819","full_name":"AmanoTeam/duckpy","owner":"AmanoTeam","description":"A simple Python library for searching on DuckDuckGo.","archived":false,"fork":false,"pushed_at":"2023-04-11T23:56:41.000Z","size":67,"stargazers_count":36,"open_issues_count":3,"forks_count":10,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-14T00:32:36.946Z","etag":null,"topics":["asynchronous","asyncio","bs4","duckduckgo","duckduckgo-search","framework","httpx","module","pypi","python","python3","search"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/AmanoTeam.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-11-08T03:07:31.000Z","updated_at":"2025-01-08T12:37:39.000Z","dependencies_parsed_at":"2024-06-19T00:22:10.192Z","dependency_job_id":"2f6eefcd-c158-472e-b088-c566caa7f89e","html_url":"https://github.com/AmanoTeam/duckpy","commit_stats":{"total_commits":67,"total_committers":2,"mean_commits":33.5,"dds":0.07462686567164178,"last_synced_commit":"177e699c13c2add05a090b5ac2d4988e326ed977"},"previous_names":[],"tags_count":11,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AmanoTeam%2Fduckpy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AmanoTeam%2Fduckpy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AmanoTeam%2Fduckpy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AmanoTeam%2Fduckpy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AmanoTeam","download_url":"https://codeload.github.com/AmanoTeam/duckpy/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254131899,"owners_count":22020040,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["asynchronous","asyncio","bs4","duckduckgo","duckduckgo-search","framework","httpx","module","pypi","python","python3","search"],"created_at":"2024-11-19T04:01:20.886Z","updated_at":"2026-04-03T10:33:50.704Z","avatar_url":"https://github.com/AmanoTeam.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://i.imgur.com/o5qAbVt.png\" alt=\"DuckPy\" height=\"250px\"\u003e\n  \u003ch4 align=\"center\"\u003eA simple Python module for searching on DuckDuckGo.\u003c/h4\u003e\n\u003c/p\u003e\n\n![PyPI](https://img.shields.io/pypi/v/duckpy) ![GitHub](https://img.shields.io/github/license/AmanoTeam/duckpy)\n\n## Installation\n\n### Duckpy can be installed using pip with this command\n\n```bash\npip install -U duckpy\n```\n\n### Alternatively, you can install the most recent version from git\n\n```bash\npip install -U git+https://github.com/AmanoTeam/duckpy\n```\n\n### If you are using Debian or Ubuntu, you can install with this command (Currently only in Debian Unstable and Ubuntu 20.10+)\n\n```bash\nsudo apt install python3-duckpy\n```\n\n## Usage\n\n```python\nfrom duckpy import Client\n\nclient = Client()\n\nresults = client.search(\"Python Wikipedia\")\n\n# Prints first result title\nprint(results[0].title)\n\n# Prints first result URL\nprint(results[0].url)\n\n# Prints first result description\nprint(results[0].description)\n```\n\n### We also provide an asynchronous version inside the `AsyncClient` class\n\n```python\nimport asyncio\nfrom duckpy import AsyncClient\n\nclient = AsyncClient()\n\nasync def get_results():\n  results = await client.search(\"Python Wikipedia\")\n\n  # Prints first result title\n  print(results[0].title)\n\n  # Prints first result URL\n  print(results[0].url)\n\n  # Prints first result description\n  print(results[0].description)\n\n\nloop = asyncio.get_event_loop()\nloop.run_until_complete(get_results())\n```\n\n### The result\n\n```text\nPython (programming language) - Wikipedia\nhttps://en.wikipedia.org/wiki/Python_(programming_language)\nPython is an interpreted, high-level, general-purpose programming language. Created by Guido van Rossum and first released in 1991...\n```\n\n## Advanced usage\n\nYou can also set up proxies or set up custom User-Agent strings depending on your needs.\n\n### Setting up proxies\n\nDuckDuckGo may temporarily block your request IP or return empty results, especially if you are using the library for scraping, bots and other stuff that generate many requests. This is not a duckpy issue and can be prevented using proxies.\n\nYou can pass a list with proxies in the Client object, then duckpy will use these proxies to make requests:\n\n```python\nimport duckpy\n\nclient = duckpy.Client(proxies=['http://123.45.67.89:80', 'https://98.76.54.32:443'])\n```\n\nIf you pass more than one proxy, they will be randomly chosen every time you use the .search() method.\n\n### Setting up custom User-Agents\n\n```python\nimport duckpy\n\nuser_agents = [\n  \"Mozilla/5.0 (X11; Linux x86_64; rv:79.0) Gecko/20100101 Firefox/79.0\",\n  \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36\"\n]\n\nclient = duckpy.Client(default_user_agents=user_agents)\n```\n\nAgain, if you pass more than one User-Agent, they will be randomly chosen every time you use the .search() method.\n\n## Disclaimer\n\nWe are not affiliated, associated, authorized, endorsed by, or in any way officially connected with DuckDuckGo, or any of its subsidiaries or its affiliates. The official DuckDuckGo website can be found at \u003chttps://duckduckgo.com\u003e.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Famanoteam%2Fduckpy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Famanoteam%2Fduckpy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Famanoteam%2Fduckpy/lists"}