diff --git a/.env b/.env index 1f3b1f2..b56474b 100644 --- a/.env +++ b/.env @@ -6,3 +6,10 @@ DISCORD_TOKEN=CREATE_ENV_LOCAL_AND_SET_TOKEN DISCORD_OFFERS_CHANNEL=1067564052022300672 DISCORD_DEV_CHANNEL=954732715377311825 DISPOSITIONS=3+kk,3+1 + +# In case you want to use Bazos.cz portal, fill in at least BAZOS_SEARCHSTRING +BAZOS_SEARCHSTRING= +BAZOS_LOCATION= +BAZOS_RADIUS= +BAZOS_PRICE_FROM= +BAZOS_PRICE_TO= diff --git a/.gitignore b/.gitignore index e03134d..0ab82f6 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ remembered_offers.txt found_offers.txt data/ .env.local +venv/ diff --git a/src/config.py b/src/config.py index bcef744..7dce30d 100644 --- a/src/config.py +++ b/src/config.py @@ -41,6 +41,12 @@ class Config: refresh_interval_nighttime_minutes: int = environ.var(converter=int) dispositions: Disposition = environ.var(converter=dispositions_converter) + bazos_searchstring: str = environ.var() + bazos_location: str = environ.var() + bazos_radius: str = environ.var() + bazos_price_from: str = environ.var() + bazos_price_to: str = environ.var() + @environ.config() class Discord: token = environ.var() diff --git a/src/scrapers/scraper_bazos.py b/src/scrapers/scraper_bazos.py new file mode 100644 index 0000000..8a0c025 --- /dev/null +++ b/src/scrapers/scraper_bazos.py @@ -0,0 +1,53 @@ +import logging + +import requests +from bs4 import BeautifulSoup + +from config import config +from scrapers.rental_offer import RentalOffer +from scrapers.scraper_base import ScraperBase +import requests +from bs4 import BeautifulSoup + + +class ScraperBazos(ScraperBase): + + name = "BAZOS" + logo_url = "https://play-lh.googleusercontent.com/EPQt7rfipj_vji4uIkVo43g7OJLNc-NH6FpT_HuiJkgHbyi_-Biossm0SnOd1UQfrdw=w240-h480-rw" + color = 0xFFA500 + + + def build_response(self) -> requests.Response: + format_str = "https://www.bazos.cz/search.php?hledat={}&hlokalita={}&humkreis={}&cenaod={}&cenado={}" + url = format_str.format( + config.bazos_searchstring, + config.bazos_location, + config.bazos_radius, + config.bazos_price_from, + config.bazos_price_to + ) + logging.debug("BAZOS request: %s", url) + + return requests.get(url, headers=self.headers) + + def get_latest_offers(self) -> list[RentalOffer]: + response = self.build_response() + soup = BeautifulSoup(response.text, 'html.parser') + + items: list[RentalOffer] = [] + + for item in soup.select(".inzeraty"): + image = item.find("img", "obrazek") + price = item.find("div", "inzeratycena") + about = item.find("div", "popis") + + items.append(RentalOffer( + scraper=self, + link=item.find("h2", "nadpis").a.get("href"), + title=item.find("h2", "nadpis").a.get_text() or "Chybí titulek", + location=about.getText() or "Chybí popis", + price=price.b.get_text() or "0", + image_url=image.get("src") + )) + + return items diff --git a/src/scrapers_manager.py b/src/scrapers_manager.py index 3c34812..f9f979f 100644 --- a/src/scrapers_manager.py +++ b/src/scrapers_manager.py @@ -14,6 +14,7 @@ from scrapers.scraper_sreality import ScraperSreality from scrapers.scraper_ulov_domov import ScraperUlovDomov from scrapers.scraper_bezrealitky import ScraperBezrealitky +from scrapers.scraper_bazos import ScraperBazos def create_scrapers(dispositions: Disposition) -> list[ScraperBase]: @@ -27,6 +28,7 @@ def create_scrapers(dispositions: Disposition) -> list[ScraperBase]: ScraperSreality(dispositions), ScraperUlovDomov(dispositions), ScraperBezrealitky(dispositions), + ScraperBazos(dispositions), ]