Klassen und Methoden strukturieren
Verfasst: Dienstag 4. Dezember 2018, 20:53
Hallo zusammen,
zurzeit arbeite ich an meinem ersten Projekt, einem Webcrawler. Dabei muss ich Daten, die ich aus der Website extrahiere, formatieren. Würdet ihr die Logik dazu in eine neue Klasse auslagern? Geht speziell um den Teil "for element_inner2" im nachfolgenden Code:
Also sowas wie:
Und den DataNormalizer dann für jede zu formatierende Eigenschaft im DataFetcher aufrufen?
zurzeit arbeite ich an meinem ersten Projekt, einem Webcrawler. Dabei muss ich Daten, die ich aus der Website extrahiere, formatieren. Würdet ihr die Logik dazu in eine neue Klasse auslagern? Geht speziell um den Teil "for element_inner2" im nachfolgenden Code:
Code: Alles auswählen
def data_crawler():
# Browser soll im Hintergrund laufen und nicht bei jedem Aufruf eine neue Instanz erzeugt werden
options = Options()
options.headless = True
# "options" funktioniert nur mit firefox
driver = webdriver.Firefox(options=options)
for element in link_crawler():
time.sleep(randint(5, 15))
driver.get(element)
soup_data = BeautifulSoup(driver.page_source, "lxml")
link = element
with open("soup_data.txt", mode="a", encoding="utf-8", newline="") as file:
file.write(soup_data.prettify())
for element_inner1 in soup_data.select(".single-detail "):
product_id = re.findall(r"\d+", element_inner1.select_one("div .product-id").text.strip())
titel = element_inner1.select_one(".product h1").text.strip()
for element_inner2 in soup_data.select("ul[class='product-list list-line'] > li"):
if "Erstzulassung" in element_inner2.find_all("span")[0].text:
erstzulassung = element_inner2.find_all("span")[1].text
elif "Kilometerstand" in element_inner2.find_all("span")[0].text:
kilometerstand = element_inner2.find_all("span")[1].text
elif "Kraftstoff" in element_inner2.find_all("span")[0].text:
kraftstoff = element_inner2.find_all("span")[1].text
elif "Getriebe" in element_inner2.find_all("span")[0].text:
getriebe = element_inner2.find_all("span")[1].text
elif "Bruttolistenpreis" in element_inner2.find_all("span")[0].text:
bruttolistenpreis = element_inner2.find_all("span")[1].text
elif "Kaufpreis" in element_inner2.find_all("span")[0].text:
kaufpreis = element_inner2.find_all("span")[1].text
elif "Anzahlung" in element_inner2.find_all("span")[0].text:
anzahlung = element_inner2.find_all("span")[1].text
elif "Laufzeit" in element_inner2.find_all("span")[0].text:
laufzeit = element_inner2.find_all("span")[1].text
elif "Rate (brutto)" in element_inner2.find_all("span")[0].text:
rate_brutto = element_inner2.find_all("span")[1].text
else:
continue
Code: Alles auswählen
class DataNormalizer:
def erstzulassung(self, erstzlassnung):
...LOGIK hier...