Seite 1 von 1

Projekt "Suchmaschine"

Verfasst: Mittwoch 21. April 2021, 11:07
von MF_1337
Hallo zusammen!

Ich bin ein Learning by Doing Typ und habe nun ein Projekt gestartet bei dem ich bei der Umsetzung auf Python gestoßen bin.

Um was gehts:
Ziel ist es eine "Suchmaschine" zu bauen, wenn man das so sagen kann. Es geht dabei um Stellenangebote. Ich bin hier in einer Nische unterwegs und es gibt ca. 10 Seiten auf denen diese Stellenangebote ausgeschrieben werden. Mich stört es, dass diese verteilt sind und ich hätte diese gerne auf einer Seite zusammengetragen. Am Ende sollen diese dann auch dynamisch auf einer Website dargestellt werden (hier möchte ich Wordpress verwenden, da ich mich dort schon ein wenig auskenne). Bei der Suche danach wie ich das ganze angehen könnte und wie ich an die Daten komme bin ich auf "web crawling" und "web scraping" gestoßen. Wenn ich es richtig verstanden habe machen beide zunächst das gleiche, Daten nach bestimmten Parametern im HTML Code durchsuchen. Der Unterschied liegt dann darin, dass crawling die Daten nur ausspuckt und scraping die Daten speichert? Ganz sicher bin ich mir hier noch nicht.

Jetzt habe ich schon die ersten Schritte gemacht und habe ein Python crawl "Programm", dass mir die Daten eines bestimmten Jobs ausspuckt (in meinem Fall ist das die itemprop="headline" und itemprop="description"). Was ich allerdings möchte ich das ganze dynamisch zu machen, heißt, ich möchte von den 10 verschiedenen Seite alle Stellenangebote die unter www.xyz.de/jobs sind herausfiltern und dann letztendlich im Optimalfall auf einer Wordpress Website zusammentragen.

Bin ich hier auf dem richtigen Weg und habt ihr Tipps für mich wie ich das dynamisch gestalten kann? Wie ich nämlich alles zusammentrage ohne eine bestimmte URL der Stellenauschreibung einzugeben und die Daten dann auf einer anderen Website übertrage.... da habe ich noch keinen Plan/Ansatz.

Merci!
Max

Re: Projekt "Suchmaschine"

Verfasst: Mittwoch 21. April 2021, 15:56
von __blackjack__
@MF_1337: „Web scraping“ bezeichnet das ”herauskratzen” von Werten aus einer/mehrerer Webseiten. Woher die URLs kommen ist dabei nicht gesagt. Ein „Crawler“ bekommt eine Ausgangs-URL, und ”krabbelt” dann von dort ausgehend über weitere Seiten die verlinkt sind. Ob Ergebnisse dauerhaft gespeichert, oder nur ausgegeben werden, steckt in keinem der beiden Begriffe.

Was auf jeden Fall problematisch ist an Deiner Beschreibung, ist dass Du die *Daten* auf Deine Webseite übertragen willst. Da dürften die Betreiber der anderen Seiten etwas gegen haben, und auch rechtliche Handhabe. So wie Du das beschreibst, funktionieren Suchmaschinen ja auch nicht. Die liefern Dir ja nicht die *Inhalte* der Webseiten auf eine Suchanfrage, sondern Links zu den Seiten.

Re: Projekt "Suchmaschine"

Verfasst: Mittwoch 21. April 2021, 17:25
von kbr
@MF_1337: Ergänzend zu __blackjack__ könnten nicht nur die Betreiber der Angebotsseiten unerfreulich auf das Auslesen von Inhalten reagieren, insbesondere wenn deren Bereitstellung kommerziell erfolgt, sondern auch deren Auftraggeber möchten womöglich das Umfeld selbst bestimmen, in dem ihre Offerten publiziert werden. Da dies das Unternehmensimage beeinflussen kann, ist das potentiell ein sehr sensibler Bereich. Unabhängig von der technischen Machbarkeit rate ich dir ab.

Alternativ könntest du deine Idee der zentralen Publikation von Stellenangeboten dieses Nischenmarktes als Produkt aufbauen und akquisitorisch tätig werden. Dann wärst du legal unterwegs – und der elfte Anbieter :)

Re: Projekt "Suchmaschine"

Verfasst: Mittwoch 21. April 2021, 19:33
von MF_1337
Danke für die Rückmeldung! Zum Thema Datenschutz habe ich mir ehrlich gesagt noch gar keine Gedanken gemacht :| Ihr werdet aber recht haben. Hmm, so wie ich mir das vorgestellt habe wird es rechtlich nicht funktionieren.

Angenommen ich möchte daraus eine richtige Suchmaschine machen, wie Google, wie sieht es damit aus? Google bzw. Facebook greifen ja lediglich den title, description etc. ab? Wenn ich das rausziehe als Text mit direktem Link auf deren Seite müsste ich ja auf der sicheren Seite sein.

Wobei wir schon beim nächsten Thema wären. Ich war in meiner Beschreibung ein wenig voreilig. Ich dachte ich müsste nur noch zwei Zeilen Code eingeben um die für mich relevanten Passagen aus dem HTML Code zu ziehen. Ich habe allerdings festgestellt, dass ich mit Phyton zwar den HTML Code der Seite abgreifen kann, jedoch fehlen dort Elemente die z.B. im Seitenquelltext drin sind. Werden diese geblockt? Habe gelesen, dass man seine Seite gegen Crawler schützen kann (unter anderem in der robots.txt Datei...). Falls das so ist, wieso bekomme ich dann einen Teil des HTML Codes angezeigt? Bzw. wo liegt hier der Fehler?
import requests
from bs4 import BeautifulSoup

url = 'xyz'
page = requests.get(url)
soup = BeautifulSoup(page.content, 'html.parser')

print(soup)
Das ist jetzt erstmal nur der Basic Code um mir den gesamten HTML Code einer bestimmten Seite anzeigen zu lassen. Allerdings wie gesagt ist dieser nach Ausführung nicht vollständig :? Also zumindest dachte ich, dass ich mir damit den kompletten Code anzeigen lassen kann...

Re: Projekt "Suchmaschine"

Verfasst: Mittwoch 21. April 2021, 20:40
von __blackjack__
@MF_1337: Ja, um das Thema Datenschutz müsstest Du Dir auch Gedanken machen, aber darum ging es bisher nicht. Wir hatten bisher was zum Urheberrecht gesagt. Zwei verschiedene Dinge.

Du kannst die Daten als Suchmaschinenanbieter wahrscheinlich schon komplett auslesen und auswerten, zum Beispiel um dann bei einer Suchanfrage die passenden Links präsentieren zu können. Wobei man was die rechtliche Seite angeht letztlich einen Anwalt fragen sollte der sich damit auskennt. Und auch der kann nicht verhindern, dass der gegnerische Anwalt das eventuell anders sieht.

Du bekommst mit der HTTP-Anfrage den Seitenquelltext. Du meinst wahrscheinlich, dass dort nicht alle Elemente drin sind, die im Browser im DOM zu sehen sind. Das passiert üblicherweise wenn Webseiten JavaScript enthalten, das den Seiteninhalt nach dem Laden verändert/erweitert.

Da müsstest Du dann schauen was die Seite konkret im Browser macht und den Effekt davon nachvollziehen. Beispielsweise wenn da Daten dynamisch nachgeladen werden, die auch in Deinem Programm nachladen. Oder im Extremfall so etwas wie Selenium benutzen, das einen Browser fernsteuert und damit auch das JavaScript auf der Seite ausführt. Was man da konkret machen kann/muss hängt von der jeweiligen Webseite ab.

Zum Quelltext: Gewöhne Dir am besten gleich an keinen Code auf Modulebene zu schreiben der nicht Konstanten, Funktionen, oder Klassen definiert.

`page` ist ein bisschen irreführend als Name für ein `Response`-Objekt. Ob das eine Seite enthält oder irgendetwas anderes, hängt von der Anfrage ab.

Man sollte auch immer prüfen ob der Inhalt die angeforderte Ressource ist, oder eine Fehlermeldung.

Code: Alles auswählen

#!/usr/bin/env python3
import requests
from bs4 import BeautifulSoup


def main():
    response = requests.get("xyz")
    response.raise_for_status()
    print(BeautifulSoup(response.content, "html.parser"))


if __name__ == "__main__":
    main()

Re: Projekt "Suchmaschine"

Verfasst: Donnerstag 22. April 2021, 08:04
von MF_1337
@__blackjack__:

Danke für den Input und die Anregung. Ich schaue mir das genauer an und werde mich dann sicherlich nochmal melden "müssen" :)