goon/app/connectors/direct_scrapers
goon-foss 5a0b62c3e4 feat(youperv): browse scraper + direct-mp4 extractor
youperv.com (DataLife Engine) carries paysite rips titled
"Studio - Performer - Title" (71% of a 132-title sample), ~60-70 new
scenes/day. Browse the homepage + /page/N/ (19 scenes/page, no overlap);
scene URL is /<category>/<id>-<slug>.html.

Cast is scoped to the fmeta block (up to the Related section): the whole
page carries 19-26 /xfsearch/pornstar/ links but only 1-2 are the actual
cast, so without scoping this would repeat the page-wide pollution that
got xxxfiles rejected. Studio comes from the title prefix, guarded so a
performer name is never mistaken for a studio. Duration, ISO release date,
per-scene tags and thumbnail all come from the same block.

Playback is a plain <source> mp4 (files.klubnichka-hd.com) with no token
or expiry, but the CDN hotlink-guards on Referer: bare Range gets 403,
Range + Referer + browser UA gets 206 cross-IP from the VPS. So the
extractor returns it with referer + mobile_direct_ok and the phone streams
straight from the CDN, no WebView and no proxy. Path is percent-encoded
because the filenames contain spaces.

Deep-crawl capped at 2000 pages: beyond that (<=09.2023) the catalog turns
into generic amateur uploads with no performers and dead CDN files.

Verified: 19 scenes/page with studio+cast+duration+date, max 2 performers
per scene (pollution guard holds), 0/19 missing duration, playback 206
video/mp4. Pilot ingest 3 pages: 57 seen, 39 attached to existing canonical
scenes, 18 new, 0 errors.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-07-26 17:57:24 +02:00
..
__init__.py feat(youperv): browse scraper + direct-mp4 extractor 2026-07-26 17:57:24 +02:00
_browse_base.py docs: correct Bright Data proxy type (ISP, flat-rate not per-GB) 2026-06-10 19:18:40 +02:00
_playtube.py feat(tubes): add 4k69 + neporn browse scrapers, shared PlayTube base 2026-06-10 18:15:13 +02:00
_search_base.py feat(scrapers): extract tags + description from porndish scene pages 2026-06-06 21:32:10 +02:00
base.py refactor(ingest): rename scraper Source name "pornapp" -> "tube-scraper" 2026-06-07 16:54:55 +02:00
eporner.py Initial commit 2026-05-20 10:10:22 +02:00
eporner_api.py feat(deep-crawl): eporner via JSON API as SSR-rich source (Phase 2b alternative) 2026-06-03 10:37:20 +02:00
fpoxxx.py feat(ingest): revive fpoxxx — search→browse (KVS /new-N/) 2026-06-22 12:04:05 +02:00
freshporno.py fix(scrapers): freshporno browse from /latest-updates/ not homepage root 2026-06-15 09:59:40 +02:00
fullmovies.py feat(ingest): SQL phash match, tag inference + backfill, clip-store skip, browse tubes, watchdog 2026-06-01 15:07:35 +02:00
hdporn92.py Initial commit 2026-05-20 10:10:22 +02:00
hdporngg.py feat(ingest): SQL phash match, tag inference + backfill, clip-store skip, browse tubes, watchdog 2026-06-01 15:07:35 +02:00
hqfap.py feat(hqfap): restore hqfap.com scraper + extractor (site back on new CDN) 2026-07-07 23:53:43 +02:00
hqporner.py fix(hqporner): require ALL query tokens in slug — stop performer over-attribution 2026-06-08 09:28:18 +02:00
hqporner_browse.py feat(ingest): browse-latest scraper dla hqporner 2026-07-26 16:41:47 +02:00
javflix.py feat(jav): separate JAV section (tab + feed gating) + enable javflix ingest 2026-07-10 11:16:31 +02:00
latestleaks.py Initial commit 2026-05-20 10:10:22 +02:00
latestpornvideo.py feat(ingest): disable hqfap/4k69 (broken playback), latestpornvideo → browse 2026-06-22 09:34:47 +02:00
mypornerleak.py fix(mypornerleak): revive search via /actor/ listing + metadata 2026-06-16 23:16:02 +02:00
mypornerleak_browse.py feat(ingest): add browse scrapers for porntrex + mypornerleak (alongside search) 2026-06-24 15:41:22 +02:00
neporn.py feat(tubes): add 4k69 + neporn browse scrapers, shared PlayTube base 2026-06-10 18:15:13 +02:00
perverzija.py feat(ingest): revive perverzija — search→WP REST API browse 2026-06-22 13:10:16 +02:00
porn00.py Initial commit 2026-05-20 10:10:22 +02:00
porn4days.py Initial commit 2026-05-20 10:10:22 +02:00
porndish.py feat(ingest): revive porndish — search→WP REST API browse 2026-06-24 15:09:27 +02:00
porndoe.py Mobile 0.1.9: OTA enable, WebView cookie-dismiss fix, porndoe connector 2026-05-22 11:20:57 +02:00
porntrex.py Initial commit 2026-05-20 10:10:22 +02:00
porntrex_browse.py fix(playback+ingest): realny proxy fallback gdy CDN nieosiagalny + porntrex duration 2026-07-26 16:34:24 +02:00
pornxp.py Initial commit 2026-05-20 10:10:22 +02:00
shyfap.py Initial commit 2026-05-20 10:10:22 +02:00
siska.py feat(siska): convert to browse scraper, re-enable (search broken site-side) 2026-06-20 16:25:11 +02:00
superporn.py docs: correct Bright Data proxy type (ISP, flat-rate not per-GB) 2026-06-10 19:18:40 +02:00
supjav.py feat(jav): supjav.com scraper + extractor (embed-aggregator, 4th JAV source) 2026-07-10 14:10:43 +02:00
sxyland.py fix(sxyland): revive search via /actor/ pages + rich metadata 2026-06-16 23:11:44 +02:00
sxyprn.py fix(sxyprn): revive search via performer pages + rich metadata 2026-06-16 22:58:52 +02:00
vjav.py feat(jav): vjav.com scraper + extractor (TXXX-network JAV source) 2026-07-10 13:13:35 +02:00
watchporn.py fix(thumbnails): watchporn thumbs at ingest + backfill; SceneDetail uses live sxyprn thumb 2026-07-07 23:21:59 +02:00
xhamster.py Initial commit 2026-05-20 10:10:22 +02:00
xmoviesforyou.py Initial commit 2026-05-20 10:10:22 +02:00
xnxx.py Initial commit 2026-05-20 10:10:22 +02:00
xnxx_browse.py feat(ingest): add xnxx browse scraper (JSON-LD only, alongside search) 2026-06-24 15:52:32 +02:00
xvideos.py Initial commit 2026-05-20 10:10:22 +02:00
xvideos_browse.py fix(xvideos): parse model name from nested span.name — recover 0-performer scenes 2026-06-08 10:13:21 +02:00
xxxfreewatch.py Initial commit 2026-05-20 10:10:22 +02:00
yesporn.py feat(deep-crawl): xvideos browse source (capped) + per-tube page cap 2026-06-03 11:16:44 +02:00
youperv.py feat(youperv): browse scraper + direct-mp4 extractor 2026-07-26 17:57:24 +02:00
youporn.py Initial commit 2026-05-20 10:10:22 +02:00
youporn_browse.py feat(ingest): add youporn browse scraper (JSON-LD only, alongside search) 2026-06-24 15:47:58 +02:00