diff --git a/scrapers/Kink.yml b/scrapers/Kink.yml index 22a755156..023ae6927 100644 --- a/scrapers/Kink.yml +++ b/scrapers/Kink.yml @@ -35,11 +35,11 @@ xPathScrapers: sceneScraper: scene: Title: - selector: //h1[contains(@class, "fs-0")] + selector: //head/script[@type='application/ld+json' and contains(text(), '"@type":"VideoObject"')] postProcess: - replace: - - regex: ^\s*(.*)\s*$ - with: $1 + - regex: '.+"name":"(.+?)","thumbnailUrl".+' + with: "$1" Code: //div[@data-shootid]/@data-shootid Date: selector: //div[@data-setup]/@data-setup @@ -137,11 +137,265 @@ xPathScrapers: split: "," Tags: Name: - selector: //div[@id="shootPage"]//p[text()="Categories"]/../following-sibling::div/a + selector: //div[@id="shootPage"]//p[text()="Categories"]/../following-sibling::div/a/@href postProcess: - replace: - - regex: \,\s* - with: "" + - regex: ^.*?/tag/ + with: "" + - regex: \?.*$ + with: "" + - regex: -(bdsm|kinkmen|kinktrans|trans)$ + with: "" + # kink.com masks sensitive category names on screen (first letter + + # asterisks, not even length-preserving), but the /tag/ URL slug is + # never masked. This map translates the slug to the full display + # name. Generated from the kink.com + kinkmen.com tag directories. + - map: + "69": "69 Position" + "acrylic-plug": "Acrylic Plug" + "air-tight": "Airtight" + "amateur": "Amateur" + "anal": "Anal" + "anal-fingering": "Anal Fingering" + "anal-fisting": "Anal Fisting" + "anal-gape": "Anal Gape" + "anal-stretching": "Anal Stretching" + "asian": "Asian" + "ass-hook": "Ass Hook" + "ass-to-mouth": "Ass To Mouth" + "athletic": "Athletic" + "ball-gag": "Ball Gag" + "bareback": "Bareback" + "bbc": "BBC" + "bbw": "BBW" + "bdsm": "BDSM" + "belly-punching": "Belly Punching" + "big-ass": "Big Ass" + "big-dick": "Big Dick" + "big-natural-tits": "Big Natural Tits" + "big-tits": "Big Tits" + "big-toy": "Big Toys" + "bisexual": "Bisexual" + "bizarre": "Bizarre" + "black": "Black" + "black-hair": "Black Hair" + "blindfold": "Blindfold" + "blond": "Blond" + "blonde": "Blonde" + "blowbang": "Blowbang" + "blowjob": "Blowjob" + "bondage": "Bondage" + "boot": "Boot" + "boot-worship": "Boot Worship" + "breast-abuse": "Breast Abuse" + "breast-bondage": "Breast Bondage" + "breeder": "Breeder" + "brunet": "Brunet" + "brunette": "Brunette" + "bush": "Bush" + "cage": "Cage" + "caning": "Caning" + "cattle-prod": "Cattle Prod" + "cbt": "CBT" + "chains": "Chains" + "champion": "Champion" + "chastity-play": "Chastity Play" + "choking": "Choking" + "circumcised": "Circumcised" + "clothespins": "Clothespins" + "clover-clamps": "Clover Clamps" + "cnc": "CNC" + "cock-worship": "Cock Worship" + "collar": "Collar" + "compilation": "Compilation" + "cop": "Cop" + "corporal-punishment": "Corporal Punishment" + "corset": "Corset" + "cosplay": "Cosplay" + "couple": "Couple" + "creampie": "Creampie" + "crop": "Crop" + "crotch-rope": "Crotch Rope" + "crying": "Crying" + "cuckolding": "Cuckolding" + "curvy": "Curvy" + "deprivation": "Deprivation" + "destruction": "Destruction" + "dildo": "Dildo" + "discipline": "Discipline" + "docking": "Docking" + "doctor": "Doctor" + "domination": "Domination" + "dominatrix": "Dominatrix" + "double-anal": "Double Anal" + "double-penetration": "Double Penetration" + "double-vaginal": "Double Vaginal" + "dragon-dildo": "Dragon Dildo" + "dunking": "Dunking" + "electrical-play": "Electrical Play" + "electric-dildo": "Electric Dildo" + "electrode-punishments": "Electrode Punishments" + "electro-plug": "Electro Plug" + "ems-pads": "EMS Pads" + "enema": "Enema" + "extreme": "Extreme" + "extreme-torment": "Extreme Torment" + "facefucking": "Facefucking" + "face-sitting": "Face Sitting" + "facial": "Facial" + "family-roleplay": "Family Roleplay" + "farts": "Farts" + "fear-play": "Fear Play" + "feet": "Feet" + "female-slave": "Female Slave" + "femdom": "Femdom" + "fetish": "Fetish" + "fingering": "Fingering" + "first-anal": "First Anal" + "first-boy-girl": "First Boy/Girl" + "first-dp": "First DP" + "first-fisting": "First Fisting" + "first-gangbang": "First Gangbang" + "first-porn-shoot": "First Porn Shoot" + "fisting": "Fisting" + "flogging": "Flogging" + "foot-torment": "Foot Torment" + "foot-worship": "Foot Worship" + "forceps-clamps": "Forceps Clamps" + "foreskin": "Foreskin" + "gag": "Gag" + "gangbang": "Gangbang" + "gaping": "Gaping" + "gay": "Gay" + "group": "Group" + "hair-pulling": "Hair Pulling" + "hairy": "Hairy" + "hand-gagging": "Hand Gagging" + "hand-job": "Hand Job" + "handler": "Handler" + "head-shaving": "Head Shaving" + "heels": "High Heels" + "hitachi": "Hitachi" + "hot-wax": "Hot Wax" + "humiliation": "Humiliation" + "interracial": "Interracial" + "jockstrap": "Jockstrap" + "kinky": "Kinky" + "latex": "Latex" + "latin": "Latin" + "latina": "Latina" + "latinx": "Latinx" + "leather": "Leather" + "leather-belt": "Leather Belt" + "leather-cuffs": "Leather Cuffs" + "leather-gloves": "Leather Gloves" + "lesbian": "Lesbian" + "lift-and-carry": "Lift And Carry" + "lingerie": "Lingerie" + "male-sub": "Male Sub" + "mask": "Mask" + "massage": "Massage" + "medical-fetish": "Medical Fetish" + "metal-bondage": "Metal Bondage" + "metal-plug": "Metal Plug" + "milf": "MILF" + "mixed": "Mixed" + "mouth-spreader": "Mouth Spreader" + "muscle": "Muscle" + "muscle-worship": "Muscle Worship" + "muscular": "Muscular" + "natural-boobs": "Natural Boobs" + "nipple-clamps": "Nipple Clamps" + "nipple-torment": "Nipple Torment" + "noose": "Noose" + "nurse": "Nurse" + "nylons-stockings": "Nylons & Stockings" + "older-and-younger": "Older/Younger" + "oral-sex": "Oral Sex" + "orgasm-denial": "Orgasm Denial" + "orgy": "Orgy" + "outdoors": "Outdoors" + "paddle": "Paddle" + "pain": "Pain" + "pain-slut": "Pain Slut" + "parody": "Parody" + "pegging": "Pegging" + "petite": "Petite" + "pet-play": "Pet Play" + "pierced-nipples": "Pierced Nipples" + "pierced-pussy": "Pierced Pussy" + "piss-play": "Piss Play" + "pony-play": "Pony Play" + "pov": "POV" + "predicament-bondage": "Predicament Bondage" + "prolapse": "Prolapse" + "prostate-stimulation": "Prostate Stimulation" + "public": "Public" + "punching": "Punching" + "puppy-play": "Puppy Play" + "pussy-eating": "Pussy Eating" + "redhead": "Redhead" + "reverse-gangbang": "Reverse Gangbang" + "rimming": "Rimming" + "role-play": "Role Play" + "rope-bondage": "Rope Bondage" + "rough-sex": "Rough Sex" + "sadism": "Sadism" + "savage-cuckolding": "Savage Cuckolding" + "scissoring": "Scissoring" + "shackle": "Shackle" + "shrimping": "Shrimping" + "single-tail": "Single Tail" + "sissification": "Sissification" + "slapping": "Slapping" + "slave": "Slave" + "slim": "Slim" + "small-tits": "Small Tits" + "smothering": "Smothering" + "sniffing": "Sniffing" + "sounding": "Sounding" + "spanking": "Spanking" + "speculum": "Speculum" + "spit-roast": "Spit Roast" + "sploshing": "Sploshing" + "squirting": "Squirting" + "stocks": "Stocks" + "straight-jacket": "Straight Jacket" + "straight-stud": "Straight Stud" + "strap-on": "Strap On" + "stud": "Stud" + "sub": "Sub" + "submission": "Submission" + "suspension": "Suspension" + "swallow": "Swallow" + "swingers": "Swingers" + "sybian": "Sybian" + "tag-team": "Tag Team" + "taser": "Taser" + "tattoo": "Tattoo" + "teacher": "Teacher" + "teen-18-plus": "Teen (18+)" + "tens-unit": "Tens Unit" + "threesome": "Threesome" + "tickling": "Tickling" + "titty-fucking": "Titty Fucking" + "top": "Top" + "ts": "TS" + "twink": "Twink" + "uncircumcised": "Uncircumcised" + "uniform": "Uniform" + "vaginal-fisting": "Vaginal Fisting" + "vaginal-penetration": "Vaginal Penetration" + "vibrator": "Vibrator" + "violet-wand": "Violet Wand" + "voyeur": "Voyeur" + "water-boarding": "Water Boarding" + "water-tank": "Water Tank" + "weights": "Weights" + "whipping": "Whipping" + "wrestling": "Wrestling" + "zapper": "Zapper" + "zipper": "Zipper" Details: selector: //head/script[@type='application/ld+json' and contains(text(), '"@type":"VideoObject"')] postProcess: @@ -280,3 +534,5 @@ driver: Value: "1" Path: "/" # Last Updated April 14, 2026 +# Last Updated April 14, 2026 (modified: JSON-LD title; unmasked tags from /tag/ URL slugs) +