name: Hotmovies
sceneByName:
  action: scrapeXPath
  queryURL: https://www.hotmovies.com/adult-clips/search?sort=score&q={}
  scraper: sceneSearch
sceneByQueryFragment:
  action: scrapeXPath
  queryURL: "{url}"
  scraper: sceneScraper
sceneByURL:
  - action: scrapeXPath
    url:
      - hotmovies.com
    scraper: sceneScraper
movieByURL:
  - action: scrapeXPath
    url:
      - hotmovies.com
    scraper: movieScraper
performerByURL:
  - action: scrapeXPath
    url:
      - hotmovies.com
    scraper: performerScraper
performerByName:
  action: scrapeXPath
  queryURL: https://www.hotmovies.com/porn-star/search?sort=rank&q={}
  scraper: performerSearch
xPathScrapers:
  sceneScraper:
    scene:
      Title: //h1
      Tags:
        Name: //meta[@property="og:video:tag"]/@content
      Performers:
        Name: //meta[@property="og:video:actor"]/@content
      URL: //meta[@name="og:url"]/@content
      Movies:
        Name: //a[@id="front-cover"]/img/@title
        URL:
          selector: //a[@id="front-cover"]/@href
          postProcess: &baseUrl
            - replace:
                - regex: ^/
                  with: https://www.hotmovies.com/
        FrontImage: //a[@id="front-cover"]/img/@src
      Studio:
        Name: //a[@data-tl="studio"]
        URL:
          selector: //a[@data-tl="studio"]/@href
          postProcess: *baseUrl
      Image: //meta[@property="og:image"]/@content
      Date: //meta[@property="og:video:release_date"]/@content
  movieScraper:
    movie:
      Name: //h1
      URL: //meta[@name="og:url"]/@content
      Director: //a[@label="Director"][1]
      Duration:
        selector: //strong[contains(text(), "Run Time")]/following-sibling::text()[1]
        postProcess:
          - replace:
              - regex: " hrs. "
                with: ":"
              - regex: " mins."
                with: ":00"
      Studio:
        Name: //a[@label="Studio"][1]
        URL:
          selector: //a[@label="Studio"][1]/@href
          postProcess: *baseUrl
      Synopsis: //article
      FrontImage: //a[@id="front-cover"]/@href
      BackImage: //a[@id="front-cover"]/following-sibling::a/@href
      Date: //meta[@property="og:video:release_date"]/@content
  performerSearch:
    performer:
      Name: //div[@id="performerlist"]//picture/img/@title
      URL:
        selector: //div[@id="performerlist"]//a[@class="performer-grid-list__performer__thumb"]/@href
        postProcess: *baseUrl
      Image: //div[@id="performerlist"]//picture/img/@src
  performerScraper:
    performer:
      URL: //meta[@name="og:url"]/@content
      Name: //meta[@name="og:title"]/@content
      Gender: //meta[@property="og:profile:gender"]/@content
      Birthdate:
        selector: //title[contains(text(), 'Born:')]
        postProcess:
          - replace:
              - regex: ^.*Born:\s([^\.]*).*$
                with: $1
          - parseDate: January 2 2006
      Country:
        selector: //small[text()="From:"]/following-sibling::text()[1]
        postProcess:
          - replace:
              - regex: .*,\s
                with: ""
      EyeColor:
        selector: //small[text()="Eyes:"]/following-sibling::text()[1]
        postProcess:
          - replace:
              - regex: \sEyes
                with: ""
      Height:
        selector: //small[text()="Height:"]/following-sibling::text()[1]
        postProcess:
          - feetToCm: true
      Measurements:
        selector: //small[text()="Stats:"]/following-sibling::text()[1]
        postProcess:
          - replace:
              - regex: "[ \"]"
                with: ""
      Image: //a[@class="star__profile__headshot fancy"]/@href
      HairColor:
        selector: //title[contains(text(), ' hair')]
        postProcess:
          - replace:
              - regex: ^.*?(\w*)\shair.*$
                with: $1
      Details: //article
      Aliases:
        selector: //title[contains(text(), 'AKA:')]
        postProcess:
          - replace:
              - regex: ^.*AKA:\s([^\.]*).*$
                with: $1
        split: ", "
      Weight:
        selector: //title[contains(text(), ' pounds')]
        postProcess:
          - replace:
              - regex: ^.*?(\w*)\spounds.*$
                with: $1
          - lbToKg: true
  sceneSearch:
    scene:
      Title: //div[@class="animated-scene-title"]
      URL:
        selector: //a[@class="animated-screen"]/@href
        postProcess: *baseUrl
      Image: //img[@class="animate screenshot"]/@src
      Movies:
        Name: //div[@class="animated-scene-hiddentxt"]/a/i
        URL:
          selector: //div[@class="animated-scene-hiddentxt"]/a/@href
          postProcess: *baseUrl
# Last Updated January 18, 2024
