name: BluMedia Network sceneByURL: - action: scrapeXPath url: - boygusher.com/play/ scraper: bgScraper - action: scrapeXPath url: - brokestraightboys.com/play/ scraper: bsbScraper - action: scrapeXPath url: - collegeboyphysicals.com/play/ scraper: cbpScraper - action: scrapeXPath url: - collegedudes.com/play/ scraper: cdScraper performerByURL: - action: scrapeXPath url: # Performers from before ~August 2016 have no details - boygusher.com/modelpage scraper: bgScraper - action: scrapeXPath url: - brokestraightboys.com/model/ scraper: bsbScraper - action: scrapeXPath url: - collegeboyphysicals.com/modelpage scraper: cbpScraper - action: scrapeXPath url: - collegedudes.com/model/ scraper: cdScraper xPathScrapers: bgScraper: scene: Title: //div[@class="dettl"] # This is a bad selector and should be improved Details: //div[@class="desc"] Image: (//div[@class="player"]//img)[1]/@src Studio: &studioFromTitle Name: selector: //title/text() postProcess: - replace: - regex: ( - .*)$ with: Performers: Name: //div[contains(@class, "model-desc")]//a[contains(@href, "modelpage")]/text() URL: selector: //div[contains(@class, "model-desc")]//a[contains(@href, "modelpage")]/@href postProcess: - replace: - regex: ^ with: https://boygusher.com performer: Name: //div[@class="dettl"] Image: //div[@class="modeltn"]/img/@src Height: selector: //div[@class="model-dtls"]//li[contains(text(), "Height")]/strong postProcess: &extractMetric - replace: - regex: .*\((\d*).* with: $1 Weight: selector: //div[@class="model-dtls"]//li[contains(text(), "Weight")]/strong postProcess: - lbToKg: true PenisLength: selector: //div[@class="model-dtls"]//li[contains(text(), "Cock")]/strong postProcess: *extractMetric Circumcised: selector: //div[@class="model-dtls"]//li[contains(text(), "Cock")]/strong postProcess: - replace: - regex: .*\)\s*(.*) with: $1 bsbScraper: scene: Title: (//header/following-sibling::div/div/div/text())[1] # This is a bad selector and should be improved Details: selector: //div[@class="dtlp"]/p concat: "\n\n" Image: (//div[@id="player"]//img)[1]/@src Studio: *studioFromTitle Performers: Name: //span/dl/a/text() URL: selector: //span/dl/a/@href postProcess: - replace: - regex: ^ with: https://brokestraightboys.com performer: Name: (//div[@class="deTlt"]/text())[1] Image: (//div[@class="wdcnt"]//img)[1]/@src Height: selector: //div[@class="wdcnt"]//li[contains(., "Height")]/text() postProcess: &extractMetric - replace: - regex: .*\((\d*).* with: $1 Weight: selector: //div[@class="wdcnt"]//li[contains(., "Weight")]/text() postProcess: - lbToKg: true PenisLength: selector: //div[@class="wdcnt"]//li[contains(., "Cock")]/text() postProcess: *extractMetric Circumcised: selector: //div[@class="wdcnt"]//li[contains(., "Cock")]/text() postProcess: - replace: - regex: .*\)\s*(.*) with: $1 cbpScraper: scene: Title: //div[@class="dettl"] Image: (//div[@class="player"]//img)[1]/@src Details: //div[@class="desc"] Studio: *studioFromTitle Performers: Name: //div[contains(@class, "model-desc")]//a[contains(@href, "modelpage")]/text() URL: selector: //div[contains(@class, "model-desc")]//a[contains(@href, "modelpage")]/@href postProcess: - replace: - regex: ^ with: https://collegeboyphysicals.com performer: Name: //div[@class="dettl"] Image: //div[@class="modeltn"]//img[1]/@src Height: selector: //div[@class="model-dtls"]//li[contains(., "Height")]/strong postProcess: *extractMetric Weight: selector: //div[@class="model-dtls"]//li[contains(., "Weight")]/strong postProcess: - lbToKg: true PenisLength: selector: //div[@class="model-dtls"]//li[contains(., "Cock")]/strong postProcess: *extractMetric Circumcised: selector: //div[@class="model-dtls"]//li[contains(., "Cock")]/strong postProcess: - replace: - regex: .*\)\s*(.*) with: $1 cdScraper: scene: Title: //div[contains(@class, "bluBar")]//strong # This is a bad selector and should be improved Details: selector: //div[@class="descD"]//p[string-length(text()) > 1] concat: "\n\n" Image: (//div[@class="player"]//img)[1]/@src Studio: *studioFromTitle Performers: Name: //div[@class="eimg"]//a/text() # This site does not link to their performers, but they DO have profiles performer: Name: //div[contains(@class, "bluBar")]//strong Image: //div[@class="modelPic"]//img[1]/@src Height: selector: //div[@class="modelDtls"]//li[contains(., "Height")]/text() postProcess: *extractMetric Weight: selector: //div[@class="modelDtls"]//li[contains(., "Weight")]/text() postProcess: - lbToKg: true PenisLength: selector: //div[@class="modelDtls"]//li[contains(., "Cock")]/text() postProcess: *extractMetric Circumcised: selector: //div[@class="modelDtls"]//li[contains(., "Cock")]/text() postProcess: - replace: - regex: .*\)\s*(.*) with: $1 # Last Updated October 02, 2023