Bitte um Hilfe!!!!!

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
suppermario
User
Beiträge: 1
Registriert: Montag 15. Februar 2021, 16:57

Folgendes, ich hatte heute ein Vorstellungsgespräch als Applikationsentwickler LEHRLING und die Firma gab mir folgenden Auftrag, den sie will wissen wie weit meine Basiskenntnisse schon sind. Und zwar geht es um die webseite: krankenhaus.netdoktor.at
Folgendes hätte ich zu erledigen: Das Python Script greift auf eine URL zu und ladet den Quellcode der Seite. Dann durchsucht das Script den zuvor geladenen Quellcode und
extrahiert jeweils den Namen des Krankenhauses und die dazugehörigen Kontaktdaten wie Adresse, Telefon usw…

import requests

downloadUrl = 'https://krankenhaus.netdoktor.at'

req = requests.get(downloadUrl)
//Bin ich da schon auf den richtigen weg? Kann mir bitte jemand einen Hinweis geben?? Ich wäre sehr sehr dankbar!
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Es geht hier um DEINE Kenntnisse. Nicht um unsere. Was glaubst du passiert, wenn du bei dieser Aufgabe bescheisst, und genommen wirst? Das die nicht merken, dass du keine Ahnung hast?

Entweder sind sie bereit in dich vom jetzigen Kenntnisstand zu investieren. Oder es wird eh ein unschönes Ende nehmen.

Und da sind wir ja noch nicht mal bei der moralischen Komponente des ganzen.
Sirius3
User
Beiträge: 18274
Registriert: Sonntag 21. Oktober 2012, 17:20

Konstanten schreibt man komplett GROSS, und benutze keine Abkürzungen, req ist auch eine komische Abkürzunge für response, woher kommt das q?

Code: Alles auswählen

import requests

HOSPITAL_URL = 'https://krankenhaus.netdoktor.at'

def main():
    response = requests.get(HOSPITAL_URL)

if __name__ == "__main__":
    main()
Und wenn Du beantworten kannst, was in `response` steht, dann bist Du auf dem richtigen Weg.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Sirius3
User
Beiträge: 18274
Registriert: Sonntag 21. Oktober 2012, 17:20

@__deets__: das war mehr eine rhetorische Frage.
christheturtle
User
Beiträge: 42
Registriert: Sonntag 29. September 2019, 12:36

Sirius3 hat geschrieben: Montag 15. Februar 2021, 18:02 Konstanten schreibt man komplett GROSS, und benutze keine Abkürzungen, req ist auch eine komische Abkürzunge für response, woher kommt das q?

Code: Alles auswählen

import requests

HOSPITAL_URL = 'https://krankenhaus.netdoktor.at'

def main():
    response = requests.get(HOSPITAL_URL)

if __name__ == "__main__":
    main()
Und wenn Du beantworten kannst, was in `response` steht, dann bist Du auf dem richtigen Weg.
Lieber Sirius, ich habe eine Rückfrage zu deiner Antwort.

Angenommen, man würde in die URL nachträglich noch Werte einfügen (z.b. mit Hilfe eines f-strings einen Suchbegriff etc.): Würde die URL dann noch als Konstante gelten? Oder würde man dabei von einer Variable sprechen? Ich denke da an so etwas wie:

Code: Alles auswählen

 f'https://krankenhaus.netdoktor.at/search/city={city_name}' 
(Beispiel ist frei erfunden... :D )

Und suppermario: Ich bin da ganz bei __deetz__. Versuch lieber, dich allein durch die Aufgabe zu rätseln - das ist ja schließlich auch der Kern deines Alltags als Programmierer. Und um deine Frage dennoch zu beantworten: Ich denke, du bist auf dem richtigen Weg. Ich selbst würde auch mit requests arbeiten. Schau dir außerdem mal BeautifulSoup an. Damit kann man schön die Daten auseinandernehmen.

Viel Erfolg!
Benutzeravatar
__blackjack__
User
Beiträge: 14054
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@christheturtle: Das wäre eine Variable. Es sei denn `city_name` wäre eine Konstante (und müsste dann laut Konvention gross geschrieben werden).

Wobei man in diesem Beispiel die URL trotzdem als Konstante herausziehen würde. Entweder als Vorlage, oder den Konstanten Teil:

Code: Alles auswählen

CITY_SEARCH_URL_TEMPLATE = (
    "https://krankenhaus.netdoktor.at/search/city={city_name}"
)


def main():
    url = CITY_SEARCH_URL_TEMPLATE.format(city_name="Berlin")


# oder

CITY_SEARCH_URL = "https://krankenhaus.netdoktor.at/search/city="


def main():
    url = CITY_SEARCH_URL + "Berlin"
Wobei ich mich frage ob Du eventuell ein "?" im Beispiel vergessen hast und es eher so lauten würde, denn in der Regel sind so etwas ja Parameter in der URL:

Code: Alles auswählen

SEARCH_URL = "https://krankenhaus.netdoktor.at/search"


def main():
    response = requests.get(SEARCH_URL, params={"city": "Berlin"})
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Benutzeravatar
__blackjack__
User
Beiträge: 14054
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Um mal zur Ausgangsfrage zurück zu kommen: So schwer ist das letztlich nicht. Eine Lösung im Lisp-Dialekt Hy hat knapp 50 Zeilen:

Code: Alles auswählen

#!/usr/bin/env hy3
(import requests
        [bs4 [BeautifulSoup]]
        [hy.contrib.pprint [pprint]])

(setv URL "https://krankenhaus.netdoktor.at/")


(defn get-soup [page-number]
  (setv response (requests.get (+ URL (str page-number))))
  (.raise-for-status response)
  (BeautifulSoup (. response content) "html.parser"))


(defn extract-hospital-nodes [soup]
  (-> (.select-one soup "#hospitalsearch_results .results") (.find-all "li")))


(defn empty-hospital-nodes? [hospital-nodes]
  (or (empty? hospital-nodes)
      (-> (first hospital-nodes) (.get "title") (none?))))


(defn iter-hospital-nodes []
  (chain.from-iterable (take-while (complement empty-hospital-nodes?)
                                   (map (comp extract-hospital-nodes get-soup)
                                        (count 1)))))


(defn get-address-node [node]
  (.find node :itemprop "address"))


(defn get-all-itemprops [node]
  (dfor prop-node (.find-all node :itemprop True)
        [(keyword (.get prop-node "itemprop")) (.strip (. prop-node text))]))


(defn extract-hospital-data [node]
  {:title (-> (.find node "a") (.get "title"))
   #** (-> (get-address-node node) (get-all-itemprops))})


(defmain [&rest args]
  (pprint (-> (map extract-hospital-data (iter-hospital-nodes)) (list))))
Ausgabe:

Code: Alles auswählen

[{:title "Sterignost"
  :addressLocality "Klagenfurt"
  :postalCode "9020"
  :addressRegion "Kärnten"
  :streetAddress "Linsengasse 46"}
 {:streetAddress "Parkweg 1"
  :postalCode "9201"
  :addressLocality "Krumpendorf"
  :addressRegion "Kärnten"
  :title "Privatkrankenanstalt Parkvilla"}

; ... ca. 400 weitere Datensätze

 {:title "Sonderkrankenanstalt Schrothkur Obervellach"
  :streetAddress "Johann-Schroth-Weg 137"
  :postalCode "9821"
  :addressLocality "Obervellach"
  :addressRegion "Kärnten"
  :telephone "04782/2043"
  :email "office@schrothkur.at"
  :faxNumber "04782/2043-14"
  :url "http://www.schrothkur.at"}
 {:title "Landeskrankenhaus - Universitätsklinikum Graz"
  :streetAddress "Auenbruggerplatz 8"
  :postalCode "8036"
  :addressLocality "Graz"
  :addressRegion "Steiermark"}]
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten