Advertisement
Guest User

Untitled

a guest
Aug 31st, 2016
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.25 KB | None | 0 0
  1. import bs4
  2. import requests as r
  3.  
  4. def _constructTableString(lengthList):
  5.     tableString = "| "
  6.  
  7.     for index, length in enumerate(lengthList):
  8.         tableString += " {2}{0}:<{1}{3} |".format(index, length, "{", "}")
  9.  
  10.     return tableString
  11.  
  12. def _getLengthList(tableRows):
  13.     """gibt eine Liste der größen zurück, die für jede Spalte benötigt wird"""
  14.  
  15.     # erstelle eine Liste mit Nullen mit der Anzahl von Spalten der Tabelle
  16.     lengthList = [0 for index in range(len(tableRows[0]))]
  17.    
  18.     for entrySet in tableRows:
  19.         for index, entry in enumerate(entrySet):
  20.             if len(entry) > lengthList[index]:
  21.                 lengthList[index] = len(entry)
  22.  
  23.     return lengthList
  24.  
  25. def _getUrls(vokabel):
  26.     """liefert die urls der verschiedenen möglichen übersetzungen"""
  27.    
  28.     websiteHTML = r.get("https://www.frag-caesar.de/lateinwoerterbuch/{0}-uebersetzung.html".format(vokabel))
  29.     soup = bs4.BeautifulSoup(websiteHTML.text, "html.parser")
  30.     container = soup.body.find_all("a", {"style" : "text-decoration: underline;"})
  31.  
  32.     return [(translation["href"], translation.text) for translation in container]
  33.  
  34. def _getSecondUrls(vokabel):
  35.     """liefert die urls der verschiedenen möglichen 2. übersetzungen"""
  36.  
  37.     # holt sich das erste Wort da die Vokabel so aus sieht "<vokabel> <wortart>"
  38.     vokabel = vokabel[1].split(' ')[0]
  39.  
  40.     websiteHTML = r.get("https://www.frag-caesar.de/lateinwoerterbuch/{0}-uebersetzung.html".format(vokabel))
  41.     soup = bs4.BeautifulSoup(websiteHTML.text, "html.parser")
  42.     container = soup.body.find_all("div", {"class":"p-substitute"})
  43.  
  44.     if container == []:
  45.         return []
  46.    
  47.     return [(translation["href"], translation.text) for translation in container[0].find_all("a")]
  48.    
  49.  
  50.    
  51.  
  52. def _getTranslation(vokabelSet):
  53.     """liefert die gesuchte uebersetzung"""
  54.  
  55.     websiteHTML = r.get("https://www.frag-caesar.de/{0}".format(vokabelSet[0]))
  56.     print(websiteHTML.text)
  57.     soup = bs4.BeautifulSoup(websiteHTML.text, "html.parser")
  58.     tableResponsive = soup.body.find_all("div", {"class" : "table-responsive"})
  59.  
  60.     translationTable = []
  61.     for column in tableResponsive[0].table.find_all("tr"):
  62.         translationTable.append([rowElement.text for
  63.                                  rowElement in
  64.                                  column.findChildren(recursive = False)])
  65.  
  66.     return translationTable
  67.  
  68. def menu():
  69.     vokabel = input("Bitte gebe eine gesuchte Vokabel an: ")
  70.     translationSets = _getUrls(vokabel)
  71.  
  72.     # wurden keine Sets gefunden war die Suche nicht erfolgreich
  73.     if translationSets == []:
  74.         print("Mmm, leider habe ich von Ihrem Suchwort bisher noch nichts gehört. Bitte überprüfen Sie es auf Tippfehler!")
  75.         return
  76.        
  77.     # durch enumerate kriegst du direkt einen index geliefert
  78.     # ersparrt dir selbst einen index zu erstellen den du
  79.     # dann pro iteration um eins erhöhst
  80.     for index, translationSet in enumerate(translationSets):
  81.         print("[{0}] {1}".format(index, translationSet[1]))
  82.  
  83.     response = int(input("Wähle nun die gewünschte Übersetzung aus: "))
  84.     print()
  85.     # da es komischerweise danach nochmal zu einer auswahl kommen kann,
  86.     # überprüfe ich das an dieser Stelle nochmal
  87.     # und wenn, dann überschreibe ich die translationSets einfach
  88.     secondTranslationSets = _getSecondUrls(translationSets[response])
  89.     if secondTranslationSets != []:
  90.         print("Ihr Suchwort {0} entspricht Formen von folgenden zwei lateinischen Wörtern:".format(translationSets[response][1].split(' ')[0]))
  91.         for index, secondTranslationSet in enumerate(secondTranslationSets):
  92.             print("[{0}] {1}".format(index, secondTranslationSet[1]))
  93.  
  94.         response = int(input("Wähle nun die gewünschte Übersetzung aus: "))
  95.         print()
  96.         translationSets = secondTranslationSets
  97.        
  98.     translationTable = _getTranslation(translationSets[response])
  99.  
  100.     lengthList = _getLengthList(translationTable)
  101.     tableString = _constructTableString(lengthList)
  102.  
  103.     print()
  104.     for index, translationEntry in enumerate(translationTable):
  105.         if index == 1:
  106.             print("-"*len(tableString.format(*translationEntry)))
  107.         print(tableString.format(*translationEntry))
  108.  
  109. menu()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement