Skip to main content

A lightweight, regex-based YouTube search library without API keys.

Project description

py-youtube-search

A lightweight, asynchronous Python library to search YouTube videos programmatically without an API key. It scrapes search results using aiohttp and re, making it fast, robust, and perfect for high-performance applications.

Features

  • Async Support: Fully asynchronous using aiohttp for non-blocking execution.
  • Reusable Client: Create a single instance and run multiple searches with different configurations.
  • No API Key Required: Search YouTube directly without setting up Google Cloud projects.
  • Advanced Filtering: Built-in support for duration (Medium 3-20m, Long >20m) and upload date filters.
  • Rich Data Extraction: Extracts Video ID, Title, Duration, and View Count using optimized regex.

Installation

pip install py-youtube-search

Quick Start

1. Basic Async Search

Initialize the client once and run multiple searches.

import asyncio
from py_youtube_search import YouTubeSearch

async def main():
    # 1. Initialize the client (reusable)
    yt = YouTubeSearch()
    
    # 2. Run a search
    videos = await yt.search("Python async tutorials", limit=5)

    for v in videos:
        print(f"Title: {v['title']}")
        print(f"Duration: {v['duration']}")
        print(f"Views: {v['views']}")
        print(f"Link: https://www.youtube.com/watch?v={v['id']}\n")

if __name__ == "__main__":
    asyncio.run(main())

2. Advanced Search with Filters

Search for specific content, like long-form videos (>20m) uploaded this week.

import asyncio
from py_youtube_search import YouTubeSearch, Filters

async def main():
    yt = YouTubeSearch()

    # Search 1: Long videos about LangGraph
    print("Searching for LangGraph...")
    videos = await yt.search("LangGraph", sp=Filters.long_this_week, limit=3)

    for v in videos:
        print(f"🎥 {v['title']} | ⏱ {v['duration']} | 👁 {v['views']}")

    # Search 2: Reusing the same client for a different query
    print("\nSearching for Python...")
    videos_py = await yt.search("Python 3.12", sp=Filters.medium_today, limit=3)
    
    for v in videos_py:
        print(f"🐍 {v['title']}")

if __name__ == "__main__":
    asyncio.run(main())

Available Filters

Pass these constants into the sp parameter of the search() method.

Duration: Medium (3 - 20 Minutes)

Filter Attribute Description
Filters.medium_today Uploaded Today
Filters.medium_this_week Uploaded This Week
Filters.medium_this_month Uploaded This Month
Filters.medium_this_year Uploaded This Year

Duration: Long (Over 20 Minutes)

Filter Attribute Description
Filters.long_today Uploaded Today
Filters.long_this_week Uploaded This Week
Filters.long_this_month Uploaded This Month
Filters.long_this_year Uploaded This Year

Data Structure

The .search() method returns a list of dictionaries:

[
  {
    "id": "lDoYisPfcck",
    "title": "Hack the planet! LangGraph AI HackBot Dev & Q/A",
    "duration": "1:05:23",
    "views": "1.2K views",
    "url_suffix": "/watch?v=lDoYisPfcck"
  }
]

Dependencies

  • aiohttp (for async requests)

License

MIT License. See LICENSE file for details.

Project details


Download files

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

Source Distribution

py_youtube_search-0.2.3.tar.gz (3.9 kB view details)

Uploaded Source

Built Distribution

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

py_youtube_search-0.2.3-py3-none-any.whl (4.2 kB view details)

Uploaded Python 3

File details

Details for the file py_youtube_search-0.2.3.tar.gz.

File metadata

  • Download URL: py_youtube_search-0.2.3.tar.gz
  • Upload date:
  • Size: 3.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.14

File hashes

Hashes for py_youtube_search-0.2.3.tar.gz
Algorithm Hash digest
SHA256 6e27903da0792883deb90727567c1ea35494394a3cbfc0ec14c4392a8b00e50c
MD5 649ecdda9617199df1e382bc7ec9db78
BLAKE2b-256 3070e940aebfc04ca237f18e47a35247554f328ff2cb38bb51e74f819d03926b

See more details on using hashes here.

File details

Details for the file py_youtube_search-0.2.3-py3-none-any.whl.

File metadata

File hashes

Hashes for py_youtube_search-0.2.3-py3-none-any.whl
Algorithm Hash digest
SHA256 aa61069d04f333ecf9b3e49c491ab1c955a2343a2b71ed7e77f3d6c618ad65f6
MD5 2fe54591d3a17336d45263a8057c196d
BLAKE2b-256 c4d740eaea47194b700c69233e265d88531f64aef523e22328211f70e839c062

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page