CarnalPlus Network Scraper

CarnalPlus Network Scraper

Summary

A comprehensive Python scraper for the CarnalPlus network, supporting 17+ gay adult sites including Gaycest, Fun Size Boys, Scout Boys, Masonic Boys, Boy For Sale, Twink Top, and more.

Note: If someone could please add this to the community sources for scrapers I would much appreciate it.

Source URL

Features

  • Scene scraping by URL - Scrape any CarnalPlus video URL
  • Scene scraping by name - Search scenes by title using the CarnalPlus search API
  • Scene scraping by fragment - Auto-detect scenes from filenames
  • Performer scraping by URL - Full performer details with auto-population on scene creation
  • Title normalization - Cleans up messy API titles (e.g., " troop time | Chapter 9: Hands-On Scouting " → “Hands-On Scouting - Troop Time - Chapter 9”)
  • 17 studio mappings - Automatically maps sub-sites to proper studio names
  • Full metadata - Extracts title, description, date, cover image, performers, tags, and studio

What It Does

The CarnalPlus scraper extracts metadata from the CarnalPlus network (server-rendered HTML platform). It:

  1. Scrapes scene metadata from any carnalplus.com video URL
  2. Searches for scenes by title via the CarnalPlus search API
  3. Fetches complete performer data inline so clicking “+” on a performer auto-fills all their details
  4. Normalizes titles from the broken API format into clean, readable titles
  5. Maps sub-sites to proper studio names (e.g., “scoutboys” → “Scout Boys”)

Example scene URL:

https://carnalplus.com/videos/hands-on-scouting-troop-time-chapter-9.html

Extracts:

  • Title: Hands-On Scouting - TROOP TIME - Chapter 9
  • Studio: Scout Boys
  • Description: Full scene description
  • Date: Release date
  • Performers: Full cast with images and details
  • Tags: Scene tags
  • Cover: High-quality poster image

Supported Studios

The scraper supports all CarnalPlus network sites:

  • Gaycest
  • Fun Size Boys
  • Scout Boys
  • Masonic Boys
  • Baptist Boys
  • Catholic Boys
  • Boy For Sale
  • Twink Top (within CarnalPlus)
  • Bareback Plus
  • Bang Bang Boys
  • Carnal Originals
  • American Muscle Hunks
  • Jalif Studio
  • Next Door Studios
  • Teens And Twinks
  • Stag Homme
  • Twinks

Installation (Docker)

Files required:

  • CarnalPlus.yml (attached)
  • CarnalPlus.py (attached)

Folder Structure

docker/
└── docker-compose.yml
└── scrapers/
    └── CarnalPlus/
        ├── CarnalPlus.yml
        └── CarnalPlus.py

Docker Compose Configuration

Add the following under volumes in your docker-compose.yml:

- ./scrapers/CarnalPlus:/root/.stash/scrapers/CarnalPlus

Restart the Stash container:

docker compose up -d

The scraper will appear in Stash’s scraper list.

Usage

Scraping by URL

  1. Edit a scene in Stash
  2. Enter a carnalplus.com URL in the URL field
  3. Click “Scrape with… > CarnalPlus”

Scraping by Search

  1. Edit a scene in Stash
  2. Click the search icon next to “Scrape with…”
  3. Search for the scene title
  4. Select the correct scene from results

Auto-scraping from Filenames

  1. If your scene has a carnalplus.com URL stored, the scraper will use it automatically
  2. Click “Scrape with… > CarnalPlus” and it will fetch updated metadata

Technical Details

  • Language: Python 3
  • Dependencies: requests, beautifulsoup4 (auto-installed via py_common)
  • Platform: Server-rendered HTML (not React SPA)
  • Search API: https://carnalplus.com/process_searchAjax.php

Notes

  • Performer images are automatically fetched when scraping scenes
  • The scraper handles the CarnalPlus API’s messy title format and normalizes it
  • Scene codes are not available for lookup (no code-based search endpoint)
  • Uses the page <title> tag for clean titles instead of the broken H1 element

Attachments:

Enjoy!

Submitted to CommunityScrapers.

What does this improve over the existing XPath scraper for CarnalPlus?