Skip to content

TheidenHD/Forschungsprojekt_HWR_Agil

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Technische Dokumentation

https://github.com/TheidenHD/Forschungsprojekt_HWR_Agil

Verwendete Technologien

  • Python
  • SQLite
  • SQLAlchemy

Abhängigkeiten

Programm

pip install sqlalchemy

Google Trends Crawler

pip install pytrends

Pferd.de Crawler

pip install requests
pip install beautifulsoup4

Datenbankschema

Datenbankschema

circle Datengrundlage:

Von Hand angelegte Tabellen deren Daten vom Programm zur Ausführung genutzt werden. Diese tabellen werden über die Skripts in /main/database/scripts/ mit Daten befüllt.

circle Programmdaten:

Vom Programm angelegte Tabellen in denen das Programm die Ergebnisse hinterlegt.

Erklärung

Bei jedem Durchlauf des Programmes wird ein Eintrag in der Scan-Tabelle angelegt mit dem aktuellen Datum und dem Suchintervall für das Programm. Das Suchintervall kann zum Beispiel ein Wert von 90 Tagen haben, wodurch das Programm bei dem Scan nur die Daten aus diesem Intervall mit in das Ergebnis mit einbezieht.

Ein Scan durchsucht dann jede Quelle in der Source-Tabelle und legt dafür jeweils einen Eintrag in der Search-Tabelle an. Der Search-Eintrag kann dabei einen Gewichtungswert enthalten, falls bestimmte Quellen mehr in das Endergebnis einfließen sollen als andere.

Bei der Suche in einer Quelle wird für jede darin gefundene Rasse aus der Race-Tabelle ein Eintrag in der Found-Tabelle angelegt. Für die jeweils im Found-Eintrag hinterlegte Rasse, wird für jede gefundenen Krankheit aus der Disease-Tabelle ein Eintrag in der Hit-Tabelle angelegt mit der Anzahl der gefundenen Vorkommen der Krankheit bei dieser Rasse.

Die beiden Tabellen RaceName und DiseaseName halten die eigentlichen Namen der Tabellen Race und Disease, da es für viele Rassen und Krankheiten mehrere Bezeichnungen gibt. Die Tabellen Race und Diesase gruppieren diese Namen also eigentlich nur über die Id.

Schnittstelle zur Datenbank

Als Schnittstelle zur Datenbank wird die Objektrelationale Abbildung von SQLAlchemy genutzt. Es gibt unter /main die Datei database_context.py, welche die Verbindung zur Datenbank herstellt und unter /main/models mehrere Modellklassen, welche die Datenbanktabellen nachstellen. Diese Modellklassen ermöglichen es mit den Tabellen aus der Datenbank als Python-Objekte zu arbeiten und beinhalten Variablen für die Werte in den Spalten, sowie Verweise auf andere Einträge die in Beziehung stehen.

Beispiele

Die Modellklasse der Hit-Tabelle

from sqlalchemy import Column, Integer, ForeignKey
from sqlalchemy.orm import relationship
from ..database_context import database

class Hit(database.table_base):
    __tablename__ = 'Hit'

    #Spalten
    id = Column(Integer, primary_key=True)
    amount = Column(Integer)
    disease_id = Column(Integer, ForeignKey('Disease.id'))

    #Verweise auf andere Einträge (Basierend auf ForeignKeys)
    found_id = Column(Integer, ForeignKey('Found.id'))
    found = relationship("Found", back_populates="hits")
    disease = relationship("Disease", back_populates="hits")

Einträge von der Datenbank abrufen und neu hinzufügen

def create_demo_data():
    #Erstellen einer Session zum Bearbeiten der Datenbank
    session = database.create_session()

    #Abrufen von Einträgen von der Datenbank
    disease = session.query(Disease).first()
    race = session.query(Race).first()

    #Erstellen von neuen Einträgen
    found = Found(id=0)
    scan = Scan(id=0, date=date.today(), interval=30)
    source = Source(id=0, name="TestSource", url="www.TestSource.com")
    search = Search(id=0, weight=7)
    hit = Hit(id=0, amount=2)

    #Verweise zu anderen Einträgen hinzufügen
    hit.disease = disease
    hit.found = found
    found.race = race
    found.search = search
    search.source = source
    search.scan = scan

    #Hinzufügen von Änderungen zur Session
    session.add(found)
    session.add(scan)
    session.add(source)
    session.add(search)
    session.add(hit)

    #Änderungen der Session auf die Datenbank übertragen
    database.commit_session(session)

Neuen Crawler erstellen

Für einen neuen Crawler kann die Vorlage verwendet werden.
Der Ordner in dem ein Crawler liegt muss im main\crawlers Ordner liegen un darf nicht mit "_" anfangen. Des Weiteren muss die Hauptdatei auf "_main.py" enden.

from ..crawler import  *

class Example(Crawler):

    def __init__(self):
       super().__init__("Example","www.example.de",1)

    def a_crawl(self, races: List[Race], diseases: List[Disease], scan: Scan):              
        return [[races[0], dict.fromkeys(diseases, 5)], [races[1], dict.fromkeys(diseases, 6)]]

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages