Init
This commit is contained in:
68
parsers/fzida.py
Normal file
68
parsers/fzida.py
Normal file
@@ -0,0 +1,68 @@
|
||||
from bs4 import BeautifulSoup
|
||||
import dateparser
|
||||
|
||||
|
||||
from .base import BaseParser, AnnoncementPreview, Announcement
|
||||
|
||||
class FzidaParser(BaseParser):
|
||||
BASE_LINK = "https://www.4zida.rs"
|
||||
BASE_SEARCH_LINK = "https://www.4zida.rs/izdavanje-stanova/novi-sad"
|
||||
BASE_PARAMS = {
|
||||
"jeftinije_od": "1000eur",
|
||||
"vece_od": "36m2",
|
||||
"namesteno": ["namesteno", "polunamesteno"],
|
||||
"sortiranje": "najnoviji"
|
||||
}
|
||||
PAGE_PARAM = "strana"
|
||||
|
||||
@classmethod
|
||||
def process_previews_page(cls, bs: BeautifulSoup) -> list[AnnoncementPreview]:
|
||||
result: list[AnnoncementPreview] = []
|
||||
|
||||
for item in bs.find_all("app-ad-search-preview"):
|
||||
title_el = item.find("h3", {"class": "description"})
|
||||
link_el = item.find("a")
|
||||
|
||||
result.append(AnnoncementPreview(
|
||||
title=title_el.text,
|
||||
link=cls.BASE_LINK + link_el.attrs["href"],
|
||||
update_date=None
|
||||
))
|
||||
|
||||
return result
|
||||
|
||||
@classmethod
|
||||
def process_annoncement_data(cls, bs: BeautifulSoup, preview: AnnoncementPreview) -> Announcement:
|
||||
description_el = bs.find("pre", {"class": "ed-description collapsed-description ng-star-inserted"})
|
||||
price_el = bs.find("div", {"class": "prices"})
|
||||
update_date_el = bs.find("app-info-item", {"label": "Oglas proveren"})
|
||||
update_date_value_el = update_date_el.find("strong", {"class": "value"})
|
||||
|
||||
update_date_value = update_date_value_el.text \
|
||||
.replace("pre", "ago") \
|
||||
.replace("dan", "day") \
|
||||
.replace("minuta", "minute") \
|
||||
.replace("sati", "hour") \
|
||||
.replace("daya", "day") \
|
||||
.replace("sekunde", "second") \
|
||||
.replace("minut", "minute") \
|
||||
.replace("minutee", "minute") \
|
||||
.replace("sekundi", "second") \
|
||||
.replace("sat", "hour") \
|
||||
.replace("houra", "hour") \
|
||||
.replace("mesec", "month") \
|
||||
.replace("montha", "month")
|
||||
|
||||
update_date = dateparser.parse(update_date_value)
|
||||
|
||||
if update_date is None:
|
||||
raise Exception(f"Update_date from {update_date_value}!")
|
||||
|
||||
return Announcement(
|
||||
title=description_el.text if description_el else "",
|
||||
# square=float(square_value),
|
||||
description=description_el.text if description_el else "",
|
||||
price=float(price_el.text.split("\xa0")[0].split(".")[0].replace(",", ".")),
|
||||
update_date=update_date.date(),
|
||||
link=preview.link
|
||||
)
|
||||
Reference in New Issue
Block a user