def METHOD_NAME(self):
    # construct person from the details from above
    p = ScrapePerson(
        state="oh",
        chamber=self.input.chamber,
        district=self.input.district,
        name=self.input.name,
        party=self.input.party,
        image=self.input.image,
    )
    p.add_source(self.input.url, "member details page")
    p.add_source(self.input.list_page_url, "member list page")
    if self.input.chamber == "lower":
        # House path
        divs = CSS(".member-info-bar-module").match(self.root)
        # last div is contact details
        contact_details = CSS(".member-info-bar-value").match(divs[-1])
        for div in contact_details:
            dtc = div.text_content()
            if ", OH" in dtc:
                # join parts of the div together to make whole address
                children = div.getchildren()
                p.capitol_office.address = "; ".join(
                    [
                        children[0].text.strip(),
                        children[0].tail.strip(),
                        children[1].tail.strip(),
                    ]
                )
            elif "Phone:" in dtc:
                p.capitol_office.voice = dtc.split(": ")[1]
            elif "Fax:" in dtc:
                p.capitol_office.fax = dtc.split(": ")[1]
    elif self.input.chamber == "upper":
        # Senators *may* have social media stuff...let's try to grab it
        try:
            social = CSS(".communications a[target='_blank']").match(self.root)
        except SelectorError:
            social = []
        for site in social:
            url = site.get("href").strip("/").lower()
            if "facebook" in url:
                p.ids.facebook = (
                    url.removeprefix("https://www.facebook.com/")
                    .split("?")[0]
                    .strip("/")
                )
            elif "twitter" in url:
                if "https" in url:
                    twit_pref = "https://twitter.com/"
                else:
                    twit_pref = "http://www.twitter.com/"
                p.ids.twitter = url.removeprefix(twit_pref).split("?")[0]
            elif "youtube" in url:
                if "user" in url:
                    p.ids.youtube = url.removeprefix(
                        "https://www.youtube.com/user/"
                    ).removesuffix("/videos")
                elif "channel" in url:
                    p.ids.youtube = url.removeprefix(
                        "https://www.youtube.com/channel/"
                    )
            elif "instagram" in url:
                p.ids.instagram = (
                    url.removeprefix("https://www.instagram.com/")
                    .split("?")[0]
                    .strip("/")
                )
            else:
                self.logger.info(f"SOCIAL NOT MATCHED: {url}")
        # Senators only have address and phone listed on Contact page
        contact_url = f"{self.input.url}/contact"
        response = requests.get(contact_url)
        content = lxml.html.fromstring(response.content)
        info_bar = content.xpath(".//div[@class='member-info-bar-value']")
        info_list = [x.text_content().strip() for x in info_bar]
        address, phone = info_list[:-1]
        p.capitol_office.voice = phone
        # Regex patterns compiled at top of file
        #  used to fix unusual and tricky spacing in address
        patterns = [
            senate_cap_sq_re,
            senate_no_cap_sq_re,
            statehouse_cap_sq_re,
            statehouse_no_cap_sq_re,
        ]
        for pattern in patterns:
            address_match = pattern.search(address)
            if address_match:
                address = ", ".join(address_match.groups())
                break
        p.capitol_office.address = address
    return p