Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import bs4
- import requests as r
- def _constructTableString(lengthList):
- tableString = "| "
- for index, length in enumerate(lengthList):
- tableString += " {2}{0}:<{1}{3} |".format(index, length, "{", "}")
- return tableString
- def _getLengthList(tableRows):
- """gibt eine Liste der größen zurück, die für jede Spalte benötigt wird"""
- # erstelle eine Liste mit Nullen mit der Anzahl von Spalten der Tabelle
- lengthList = [0 for index in range(len(tableRows[0]))]
- for entrySet in tableRows:
- for index, entry in enumerate(entrySet):
- if len(entry) > lengthList[index]:
- lengthList[index] = len(entry)
- return lengthList
- def _getUrls(vokabel):
- """liefert die urls der verschiedenen möglichen übersetzungen"""
- websiteHTML = r.get("https://www.frag-caesar.de/lateinwoerterbuch/{0}-uebersetzung.html".format(vokabel))
- soup = bs4.BeautifulSoup(websiteHTML.text, "html.parser")
- container = soup.body.find_all("a", {"style" : "text-decoration: underline;"})
- return [(translation["href"], translation.text) for translation in container]
- def _getSecondUrls(vokabel):
- """liefert die urls der verschiedenen möglichen 2. übersetzungen"""
- # holt sich das erste Wort da die Vokabel so aus sieht "<vokabel> <wortart>"
- vokabel = vokabel[1].split(' ')[0]
- websiteHTML = r.get("https://www.frag-caesar.de/lateinwoerterbuch/{0}-uebersetzung.html".format(vokabel))
- soup = bs4.BeautifulSoup(websiteHTML.text, "html.parser")
- container = soup.body.find_all("div", {"class":"p-substitute"})
- if container == []:
- return []
- return [(translation["href"], translation.text) for translation in container[0].find_all("a")]
- def _getTranslation(vokabelSet):
- """liefert die gesuchte uebersetzung"""
- websiteHTML = r.get("https://www.frag-caesar.de/{0}".format(vokabelSet[0]))
- print(websiteHTML.text)
- soup = bs4.BeautifulSoup(websiteHTML.text, "html.parser")
- tableResponsive = soup.body.find_all("div", {"class" : "table-responsive"})
- translationTable = []
- for column in tableResponsive[0].table.find_all("tr"):
- translationTable.append([rowElement.text for
- rowElement in
- column.findChildren(recursive = False)])
- return translationTable
- def menu():
- vokabel = input("Bitte gebe eine gesuchte Vokabel an: ")
- translationSets = _getUrls(vokabel)
- # wurden keine Sets gefunden war die Suche nicht erfolgreich
- if translationSets == []:
- print("Mmm, leider habe ich von Ihrem Suchwort bisher noch nichts gehört. Bitte überprüfen Sie es auf Tippfehler!")
- return
- # durch enumerate kriegst du direkt einen index geliefert
- # ersparrt dir selbst einen index zu erstellen den du
- # dann pro iteration um eins erhöhst
- for index, translationSet in enumerate(translationSets):
- print("[{0}] {1}".format(index, translationSet[1]))
- response = int(input("Wähle nun die gewünschte Übersetzung aus: "))
- print()
- # da es komischerweise danach nochmal zu einer auswahl kommen kann,
- # überprüfe ich das an dieser Stelle nochmal
- # und wenn, dann überschreibe ich die translationSets einfach
- secondTranslationSets = _getSecondUrls(translationSets[response])
- if secondTranslationSets != []:
- print("Ihr Suchwort {0} entspricht Formen von folgenden zwei lateinischen Wörtern:".format(translationSets[response][1].split(' ')[0]))
- for index, secondTranslationSet in enumerate(secondTranslationSets):
- print("[{0}] {1}".format(index, secondTranslationSet[1]))
- response = int(input("Wähle nun die gewünschte Übersetzung aus: "))
- print()
- translationSets = secondTranslationSets
- translationTable = _getTranslation(translationSets[response])
- lengthList = _getLengthList(translationTable)
- tableString = _constructTableString(lengthList)
- print()
- for index, translationEntry in enumerate(translationTable):
- if index == 1:
- print("-"*len(tableString.format(*translationEntry)))
- print(tableString.format(*translationEntry))
- menu()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement