refactor: remove cls method
parent
a433e46258
commit
b76c659f94
|
@ -11,12 +11,9 @@ class ScraperInput:
|
||||||
|
|
||||||
|
|
||||||
class Scraper:
|
class Scraper:
|
||||||
listing_type = ListingType.FOR_SALE
|
|
||||||
|
|
||||||
def __init__(self, scraper_input: ScraperInput):
|
def __init__(self, scraper_input: ScraperInput):
|
||||||
self.location = scraper_input.location
|
self.location = scraper_input.location
|
||||||
self.session = requests.Session()
|
self.session = requests.Session()
|
||||||
Scraper.listing_type = scraper_input.listing_type
|
|
||||||
|
|
||||||
if scraper_input.proxy_url:
|
if scraper_input.proxy_url:
|
||||||
self.session.proxies = {
|
self.session.proxies = {
|
||||||
|
|
|
@ -10,6 +10,7 @@ class ZillowScraper(Scraper):
|
||||||
|
|
||||||
def __init__(self, scraper_input):
|
def __init__(self, scraper_input):
|
||||||
super().__init__(scraper_input)
|
super().__init__(scraper_input)
|
||||||
|
self.listing_type = scraper_input.listing_type
|
||||||
if self.listing_type == ListingType.FOR_SALE:
|
if self.listing_type == ListingType.FOR_SALE:
|
||||||
self.url = f"https://www.zillow.com/homes/for_sale/{self.location}_rb/"
|
self.url = f"https://www.zillow.com/homes/for_sale/{self.location}_rb/"
|
||||||
elif self.listing_type == ListingType.FOR_RENT:
|
elif self.listing_type == ListingType.FOR_RENT:
|
||||||
|
@ -48,8 +49,7 @@ class ZillowScraper(Scraper):
|
||||||
return [property]
|
return [property]
|
||||||
raise PropertyNotFound("Specific property data not found in the response.")
|
raise PropertyNotFound("Specific property data not found in the response.")
|
||||||
|
|
||||||
@classmethod
|
def _parse_home(self, home: dict):
|
||||||
def _parse_home(cls, home: dict):
|
|
||||||
"""
|
"""
|
||||||
This method is used when a user enters a generic location & zillow returns more than one property
|
This method is used when a user enters a generic location & zillow returns more than one property
|
||||||
"""
|
"""
|
||||||
|
@ -60,9 +60,9 @@ class ZillowScraper(Scraper):
|
||||||
)
|
)
|
||||||
|
|
||||||
if "hdpData" in home and "homeInfo" in home["hdpData"]:
|
if "hdpData" in home and "homeInfo" in home["hdpData"]:
|
||||||
price_data = cls._extract_price(home)
|
price_data = self._extract_price(home)
|
||||||
address = cls._extract_address(home)
|
address = self._extract_address(home)
|
||||||
agent_name = cls._extract_agent_name(home)
|
agent_name = self._extract_agent_name(home)
|
||||||
beds = home["hdpData"]["homeInfo"]["bedrooms"]
|
beds = home["hdpData"]["homeInfo"]["bedrooms"]
|
||||||
baths = home["hdpData"]["homeInfo"]["bathrooms"]
|
baths = home["hdpData"]["homeInfo"]["bathrooms"]
|
||||||
listing_type = home["hdpData"]["homeInfo"].get("homeType")
|
listing_type = home["hdpData"]["homeInfo"].get("homeType")
|
||||||
|
@ -79,10 +79,10 @@ class ZillowScraper(Scraper):
|
||||||
else:
|
else:
|
||||||
keys = ("addressStreet", "addressCity", "addressState", "addressZipcode")
|
keys = ("addressStreet", "addressCity", "addressState", "addressZipcode")
|
||||||
address_one, city, state, zip_code = (home[key] for key in keys)
|
address_one, city, state, zip_code = (home[key] for key in keys)
|
||||||
address_one, address_two = cls._parse_address_two(address_one)
|
address_one, address_two = self._parse_address_two(address_one)
|
||||||
address = Address(address_one, city, state, zip_code, address_two)
|
address = Address(address_one, city, state, zip_code, address_two)
|
||||||
|
|
||||||
building_info = cls._extract_building_info(home)
|
building_info = self._extract_building_info(home)
|
||||||
return Building(address=address, url=url, **building_info)
|
return Building(address=address, url=url, **building_info)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
@ -124,15 +124,14 @@ class ZillowScraper(Scraper):
|
||||||
listing_type=property_data.get("homeType", None),
|
listing_type=property_data.get("homeType", None),
|
||||||
)
|
)
|
||||||
|
|
||||||
@classmethod
|
def _extract_building_info(self, home: dict) -> dict:
|
||||||
def _extract_building_info(cls, home: dict) -> dict:
|
|
||||||
num_units = len(home["units"])
|
num_units = len(home["units"])
|
||||||
prices = [
|
prices = [
|
||||||
int(unit["price"].replace("$", "").replace(",", "").split("+")[0])
|
int(unit["price"].replace("$", "").replace(",", "").split("+")[0])
|
||||||
for unit in home["units"]
|
for unit in home["units"]
|
||||||
]
|
]
|
||||||
return {
|
return {
|
||||||
"listing_type": cls.listing_type,
|
"listing_type": self.listing_type,
|
||||||
"num_units": len(home["units"]),
|
"num_units": len(home["units"]),
|
||||||
"min_unit_price": min(
|
"min_unit_price": min(
|
||||||
(
|
(
|
||||||
|
|
Loading…
Reference in New Issue