Du bist nicht eingeloggt.

Login

Pass

Registrieren

Community
Szene & News
Locations
Impressum

Forum / Bits und Bytes

Bild von Website per Skript herunterladen

<<< zurück   -1- -2-  
_BlackLight_ - 28
Profi (offline)

Dabei seit 07.2015
610 Beiträge
Geschrieben am: 08.11.2020 um 18:20 Uhr
Zuletzt editiert am: 08.11.2020 um 18:36 Uhr

Den Thread hab ich wohl übersehen :D
Hast du dir Beautiful Soup mal angesehen?

Für gewöhnlich ist das Hauptproblem ja, die interessanten Komponenten zu isolieren und deren Inhalte zu extrahieren - da ist die Library schon ein Schweizer Taschenmesser, zumindest wenn die Struktur der abgefragten Website sich nicht regelmäßig und umfangreich ändert.
Wobei das ohnehin der Worst Case jedes Scrapers ist ;)

Edit:
Für das Bild auf kachelmannwetter.com werden anscheinend (danke, Chromium developer tools ;) ) mehrere Teile übereinander gelegt, die aber alle ein id-Attribut haben, über das beautiful soup die tags extrahieren können sollte.
Du müsstest dann nur danach mit PIL oder einer anderen Library die Bilder mergen.

"Sie haben kein Recht auf Ihre Meinung. Sie haben ein Recht auf Ihre fundierte Meinung." H. Ellison

Inception_ - 31
Profi (offline)

Dabei seit 05.2009
621 Beiträge

Geschrieben am: 08.11.2020 um 19:48 Uhr
Zuletzt editiert am: 08.11.2020 um 19:48 Uhr

Danke für deinen Beitrag. Beautiful Soup habe ich gestern kennengelernt und wie gestern gepostet die ersten Schritte gemacht: Twitter Followerzahl auslesen und Börsendaten extrahieren. An die kachelmannwetter.de Seiten werde ich demnächst nochmal ran gehen, da hatte ich aber in der Vergangenheit schon eine erste Lösung erarbeitet (siehe Post vorher).

Science, 128√e980 .. :*

Inception_ - 31
Profi (offline)

Dabei seit 05.2009
621 Beiträge

Geschrieben am: 09.11.2020 um 21:47 Uhr
Zuletzt editiert am: 09.11.2020 um 22:05 Uhr

Ich haben nun mit den Packages selenium und pyautogui ein Skript geschrieben, das mein eingangs gefragtes Problem löst.

Falls es jemand ausführen möchte: Je nach Browser braucht selenium den entsprechenden Webdriver. In meinem Fall ist es Firefox und daher der geckodriver.

Mit selenium kann man Browser Interaktionen ausführen, z. B. Formulare ausfüllen (z. B. Login Daten eingeben) oder Buttons und Links anklicken. pyautogui kann Windows Fenster kontrollieren, z. B. wenn man einen Download Link anklickt.

Zitat:

# import packages
from selenium import webdriver # selenium for browser interaction
import time as t # for sleep()
import pyautogui # to control firefox save as gui

# open browser firefox
path = "geckodriver.exe"
driver = webdriver.Firefox()
driver.get("https://kachelmannwetter.com/de/wetteranalyse")

t.sleep(3)

# accept cookies
link = driver.find_element_by_class_name("nx2DiOVW")
link.click()

t.sleep(3)

# click on top right share button
link = driver.find_element_by_class_name("btn-group")
link.click()

t.sleep(3)

# select save as
link = driver.find_element_by_xpath("//span[contains(@class, 'share') and text()='Speichern unter...']")
link.click()

t.sleep(3)

# save image to folder where this script runs
pyautogui.hotkey('down')
t.sleep(1)
pyautogui.hotkey('enter')

# quit the browser
driver.quit()


Danke für eure Hilfe :)

Science, 128√e980 .. :*

lilibeth20 - 39
Fortgeschrittener (offline)

Dabei seit 11.2016
85 Beiträge

Geschrieben am: 30.12.2020 um 01:04 Uhr
Zuletzt editiert am: 18.11.2021 um 01:27 Uhr

Bei vielen Seiten sind die Paths zum Bild im Quelltext zu finden.
Da braucht man keine Scripte.

Nimm Influently zum Beispiel die machen Influencer Marketing
da lassen sich selbst die Podcasts runterladen, was wohl auch so gewollt ist.
_BlackLight_ - 28
Profi (offline)

Dabei seit 07.2015
610 Beiträge
Geschrieben am: 30.12.2020 um 10:06 Uhr

Zitat von lilibeth20:

Bei vielen Seiten sind die Paths zum Bild im Quelltext zu finden.
Da braucht man keine Scripte.

Geht glaub eher darum, das automatisch zu machen und nicht von Hand im Quelltext nach den Angaben zu suchen.
Gerade wenn es wie im ersten Post angegeben darum geht, alle 60 min ein Bild herunterzuladen (bei Webcams oder in Echtzeit aktualisierten Charts kann das z.B. Sinn ergeben), ist das von Hand nicht kontinuierlich möglich :)

[zustimmen1 Person stimmt diesem Beitrag zu:
Inception_, ... mehr anzeigen


"Sie haben kein Recht auf Ihre Meinung. Sie haben ein Recht auf Ihre fundierte Meinung." H. Ellison

Inception_ - 31
Profi (offline)

Dabei seit 05.2009
621 Beiträge

Geschrieben am: 19.02.2021 um 07:17 Uhr
Zuletzt editiert am: 19.02.2021 um 07:35 Uhr

Ich habe nun auch herausgefunden, wie man Daten direkt aus Diagrammen herausliest. Betrachte folgende Seite:
https://kachelmannwetter.com/de/vorhersage/2820256-ulm/xl/euro.

Die Diagrammdaten der einzelnen Wettermodelle stehen nicht blank im HTML Code und können daher nicht einfach mit beautifulSoup gescrapet werden. Sie werden über javascripts geladen. Man braucht einen "headless browser", also einen Browser, der so tut, als würde ein Mensch tatsächlich die Seite aufrufen wollen (dann wird der javascript Code nämlich auch ausgeführt). Das geht mit selenium (oben schon erwähnt) oder dem Paket requests-html, Letzteres wird aber nur bis Python 3.6 unterstützt.
Mit dem folgenden Code bekommt man den vollen Quelltext inkl. Daten im Diagramm:

Zitat:


from selenium import webdriver
import bs4, time

my_url = https://kachelmannwetter.com/de/vorhersage/2820256-ulm/xl/euro
driver = webdriver.Firefox(my_url) # geckodriver required! check manual of selenium
driver.get(my_url)
timer.sleep(10) # sleeping required for javascripts on webpage to be loaded
jspagedata = bs4.BeautifulSoup(driver.page_source, 'html.parser')



[Der Code oben ist von Hand geschrieben, könnte also (Tipp-)fehler enthalten.]

Science, 128√e980 .. :*

<<< zurück
 
-1- -2- [Antwort schreiben]

Forum / Bits und Bytes

(c) 1999 - 2024 team-ulm.de - all rights reserved - hosted by ibTEC Team-Ulm

- Presse - Blog - Historie - Partner - Nutzungsbedingungen - Datenschutzerklärung - Jugendschutz -