ich habe ein irgendwie verzwicktes Problem, bei dem ich nicht weiterkomme: ich habe drei Klassen in "normaler" Hierarchie:
Code: Alles auswählen
class Immobilienseite:
def __init__(self, url):
self._url = url
self._suchtxt = ''
self.__seite = urllib.request.urlopen(self._url)
self.__sourcecode = self.__seite.read().decode('utf8')
self._soup = BeautifulSoup(self.__sourcecode, 'html.parser')
def bs4_aufbereiten(self):
for JS in self.__soup(['style','script','path']): #Um Zeit zu sparen werden erst alle Scripte und Styles entfernt. BS tut das nicht automatisch.
JS.extract()
def fliesstext_auswerten(self):
self.__suchtxt = self.__soup.body.get_text()
self.__suchtxt = re.sub('\r|\n', ' ',self.__suchtxt) #Text aufbereiten: um später bessere Suchergebnisse zu erzielen (also nicht Zeilenumbrüche oder doppelte Leerzeichen berücksichtigen zu müssen) werden diese in zwei Stufen entfernt und der Suchtext auf einen einzigen Textblock normalisiert.
self.__suchtxt = re.sub('\s{2,}', ' ',self.__suchtxt)
neue_suche = Suchmechnismus(self.__suchtxt)
neue_suche.suchwort_abgleich()
class Immobilienscout (Immobilienseite):
def __init__(self, url):
Immobilienseite.__init__(self, url)
self._neue_suche = Suchmechnismus(self._suchtxt)
self.ist_landingpage()
def ist_landingpage(self):
if 'expose' not in self._url:
Landingpage(self)
class Landingpage():
def __init__(self, Scoutobj):
self.__Scout = Scoutobj
self.typ_pruefen()
def typ_pruefen(self):
if self.__Scout._soup.find_all('a', {'title':'Projektinformationen'}): #Landingpage Typ1, erzeugt mit JS.
merkm_liste = self.__Scout._soup.find('ul', class_='list-check')
listenpunkte = merkm_liste.find_all('li')
counter = 1
for tag in li_tags:
tag = tag.text
if re.search(r'\d\s?-?\d?\s?Zimmer', tag, re.IGNORECASE):
self._neue_suche.keywords.append(tag)
elif re.search('\d{1,3}\s?m\u00B2', tag, re.IGNORECASE):
self._neue_suche.keywords.append(tag)
elif re.search(r'Ausstattung', tag, re.IGNORECASE):
self._neue_suche.keywords.append(tag)
elif counter == len(li_tags):
self._neue_suche.keywords.append('Anschrift: ' + tag)
counter += 1
print(self._neue_suche.keywords)
Falls das "if" in ist_landingpage() wahr ist, soll einfach ein Aufruf der Subklasse erfolgen, die dann bestimmte Checks durchführt und die entsprechenden Attribute der Basisklasse bzw. der Basisbasisklasse setzt. Irgendwie bekomme ich das aber nicht hin... wo ist mein Denkfehler - könnt ihr mir auf die Sprünge helfen?
DAnke!