Da-unaloda Stainda Apa Rahula -2022- Hindi Filmyfly Filmy4wap Filmywap Apr 2026
results.append( "source": "Filmywap", "title": title, "year": year, "language": language, "quality": quality, "url": href, ) return results
# Example meta: "2022 Hindi 1080p" meta = c.select_one("span.meta") year, language, quality = None, None, None if meta: txt = meta.get_text() m_year = re.search(r"\b(20\d2)\b", txt) year = m_year.group(1) if m_year else None language = "Hindi" if "hindi" in txt.lower() else None qual_match = re.search(r"\b(720p|1080p|4k)\b", txt, re.I) quality = qual_match.group(0) if qual_match else None
import re import json import unicodedata from typing import List, Dict, Any import requests from bs4 import BeautifulSoup from rapidfuzz import fuzz, process
# Some sites embed details in data‑attributes: year = c.get("data-year") language = c.get("data-language") quality = c.get("data-quality") results
Author: <Your Name> Date: 2026‑04‑18 """
@classmethod def search(cls, query: str) -> List[Dict[str, Any]]: url = cls.SEARCH_URL.format(query=query.replace(" ", "%20")) soup = BeautifulSoup(cls._get(url).text, "html.parser") cards = soup.select("div.movie-box") # CSS selector works for current layout results = [] for c in cards: title_tag = c.select_one("h2 a") if not title_tag: continue title = title_tag.get_text(strip=True) href = cls._clean_link(title_tag["href"])
@classmethod def search(cls, query: str) -> List[Dict[str, Any]]: url = cls.SEARCH_URL.format(query=query.replace(" ", "-")) soup = BeautifulSoup(cls._get(url).text, "html.parser") cards = soup.select("article.movie-item") results = [] for c in cards: a = c.select_one("h3 a") if not a: continue title = a.get_text(strip=True) href = cls._clean_link(a["href"]) results.append( "source": "Filmywap"
# Apply matching logic matches = match_results(deduped, query_norm)
class Filmy4wapScraper(BaseScraper): SEARCH_URL = "https://www.filmy4wap.in/search?q=query"
# ---------------------------------------------------------------------- # 4️⃣ Orchestrator – pull everything together # ---------------------------------------------------------------------- def search_movie(query: str) -> Dict[str, Any]: """ Core function – call it from your UI, API endpoint or CLI. Returns a dict with: - query (original) - normalized_query - total_matches - results (list, deduped) """ query_norm = normalize(query) quality = None
class FilmyFlyScraper(BaseScraper): SEARCH_URL = "https://www.filmyfly.in/search/query"
@staticmethod def _get(url: str) -> requests.Response: """GET with a tiny retry loop.""" for _ in range(3): try: r = requests.get(url, headers=BaseScraper.HEADERS, timeout=12) r.raise_for_status() return r except requests.RequestException: continue raise RuntimeError(f"Failed to fetch url")
query_str = " ".join(args.title) data = search_movie(query_str)
HEADERS = "User-Agent": ( "Mozilla/5.0 (Windows NT 10.0; Win64; x64) " "AppleWebKit/537.36 (KHTML, like Gecko) " "Chrome/124.0.0.0 Safari/537.36" )










