Wir wünschen allen Forenteilnehmern ein frohes Fest und einen guten Rutsch ins neue Jahr. x

Daten aus dem Web ohne Tabelle importieren
#1
Hallo,

Daten aus einer Webtabelle importieren stellt kein Groesseres Problem dar,

nun habe ich folgende Website: ***
diese Stellt keine Tabelle zur verfuegung, lediglich Ein-/Ausgabefelder.

gibt es hier eine Moeglichkeit diese Berechnungs'tabelle' zu importieren und von Excel aus mit Werten zu fuettern bzw. zu berechnen?

ebenso beispielsweise hier: ***  

dort werden preise angezeigt die in keine Tabelle laufen, diese moechte ich in Excel importieren und wenn moeglich 1x Taeglich in dieser aktualisieren.

Gibt es hier moeglichkeiten?


Gruss

*** Links wegen Werbung entfernt
Antworten Top
#2
Hallo,

ich weiß ja nicht wer die Links entfernt hat, aber ohne kann da niemand etwas zu sagen. Jede Webseite ist individuell erstellt worden, also muss auch jedes Makro zum Auslesen von Daten von einer Webseite individuell, genau auf Grundlage dieser Webseite erstellt werden. Das bedeutet in Deinem Fall, Du brauchst vermutlich mindestens zwei Makros, wenn Du mindestens zwei unterschiedliche Seiten hast.

Web Scraping Techniken gibt es unterschiedliche. Man kann xhr (XML HTTP Request), WinHTTP (fast so wie xhr) oder Seleniumbasic (um Chrome oder Edge zu automatisieren) einsetzen. Der IE sollte nicht mehr verwendet werden, denn der wird aktiv von MS ausgemustert. Auf die Elemente einer Seite wird bei xhr und WinHTTP über das DOM (Document Object Model) zugegriffen. Seleniumbasic bringt eine eigene Schnittstelle mit, die aber sehr ähnlich funktioniert. Generell spielt es keine Rolle, ob es um eine Tabelle oder anders verteilte Inhalte geht. Rechne aber damit, dass Webseitenbetreiber Web Scrapern Steine in den Weg werfen und Stöcke zwischen die Beine. Je größer das Unternehmen hinter einer Seite, desto mehr Ressourcen haben sie, um Dir das Leben schwer zu machen.

Viele Grüße,

Zwenn

Edit:
Es gibt natürlich auch die Excel eigenen Werkzeuge, wie z.B. Power Query, um Daten auszulesen.
Antworten Top
#3
Hallo!

Danke ersteinmal, hier die Links:

https :// leds-and-more. *.de/  Widerstandsrechner

https: // leds-and-more. *.de/  18mm-LEDs-axial_2

Links wegen werbung entfernt! super da kann man ja keine Lösung haben...

Gruss
Antworten Top
#4
Hallo,

hm, den Vorwiderstand der LED zu berechnen ist ja nicht so schwer, das kann man mit einer einfachen Formel auch tun:

R = (U1-U2)/I = (12V-3,2V)/0,02 A = 440 Ohm

Drei Eingabefelder für U1, U2 und I und fertig. Den nächsthöheren Widerstand findest Du sicher auch ohne, dass die Farbkombination angezeigt wird.

Beim zweiten Link bin ich mir nicht sicher, welche Informationen Du auslesen möchtest.
Gruß
Michael
Antworten Top
#5
Hallo,

prinzipiell geht es hier garnicht um die Formel selber, es geht um die Einbindung in Excel.
hier der eigentliche Problemfall:

ich habe diesen Link: (ist ein http:// link)

..../trace/index.php3?id=&id1=&id2=&id3=&id4=&id5=&start=Start


auf diesem Link Existieren 6 Felder:

id
id1
id2
id3
id4
id5

in jedes Feld kann ein Eintrag gemacht werden: z.B.:

id=Maschine26
id1=43
id2=58
.
.
usw. 

wenn in den id feldern eingaben gemacht werden aktualisiert sich auch der Link selber (jeweils hinter dem = mit der eingegebenen Zahl)

wenn nun mit Enter bestaetigt wird (oder der Button start gedrueckt wird)
sind unterhalb der id1-5 Felder 5 ausgabefelder die mir ergebnisse der ID Suche zureckgeben.

nun habe ich das Grosse problem, ich habe etwa 1400 id's (in einem Excel File..)
die ich von hand in die 5 Felder eintragen muss, die Ergebnisse wieder haendisch ins excel file uebertragen muss, dann die naechsten id's in die suchfelder eintragen usw. usw...

also kurzgesagt eine richtig aufwaendige sache.

ich braeuchte eine Excel funktion die den Link mit den id's in meiner Tabelle fuettert und in der naechsten spalte die ergebnisse herausschreibt.

ich hoffe ich konnte es gut genug erklaeren und hoffe es gibt so eine moeglichkeit?

soweit ich das im moment beurteilen kann fehlen in meinem link noch die 5 ausgabefeld adressen..
diese suche ich noch heraus.


Gruss
Antworten Top
#6
Hallo,

habe Deine PM erhalten. Sorry für die späte Antwort. Bitte keine Anfragen zu Diskussion in Threads per PM, auch wenn das mit den Links offenbar gerade etwas komisch läuft. Weiß jemand warum? Ich habe in der Vergangenheit auch schon so einige Links gepostet. Ist das jetzt verboten?

Zum Thema:
Die Seite, die Du mir verlinkt hast, hat sich Michael inzwischen ja auch angesehen.Die ist in der Tat etwas merkwürdig. Die Berechnungen werden über Java Script vorgenommen. Das passiert also lokal, weshalb es keine direkte Möglichkeit gibt ein Ergebnis über einen manipulierten Link zu erhalten. Das ist soweit normal und vor allem auch sinnvoll für solche Aufgaben. Die in den ausgegrauten Textfeldern ausgewiesenen Ergebnisse tauchen aber nicht im HTML Code auf, was ich sehr befremdlich finde. Jedenfalls konnte ich sie nicht finden und dem entsprechend auch nicht abgreifen.

Nun schreibst Du aber, das Ziel ist eigentlich, eine andere Seite(?) mit 5 Parametern zu füttern und von dort das Ergebnis nach Excel zu übernehmen. Eine Lösung dafür kann natürlich völlig anders aussehen. Kann man sich aber nur ansehen, wenn man, wer hätte es gedacht, den Link kennt. Wenn der sich hier nicht posten lässt, dann schick mir den doch nochmal per PM zu. Oder habe ich die Aufgabenstellung falsch verstanden?

Viele Grüße,

Zwenn
Antworten Top
#7
Ich habe mir den HTML Code aus Deiner PM angesehen und ihn im Browser aufgerufen. Da sehe ich zwar die Textfelder, um die es geht, aber man kann damit nix weiter anfangen. Das kann auch nicht alles sein, was Du hast. Es ist insgesamt eine Umgebung, die auf einem WebServer läuft richtig? Auch wenn dieser lokal betrieben wird. Das mache ich am versuchten Aufruf einer PHP Datei fest. In dieser dürfte die Programmierung für die Berechnungen vorliegen und über diese Datei generiert der WebServer die Antwortdatei. Ohne Zugriff auf diese Umgebung wird es mit Hilfe schwierig.

Grundsätzlich müsstest Du die gezeigte URL inklusive Parameter, die aus Deiner Excel Tabelle befüllt werden, über VBA absetzen können und aus der Antwort dann die Ergebnisse verarbeiten können. Der Umweg über den "Start" Button müsste beim direkten Aufruf der URL wegfallen. Wenn das so ist und Du hast das alles lokal vorliegen, müsste das relativ einfach über xhr (XML HTTP Request) umsetzbar sein, weil weder Cookies noch SeassionIDs eine Rolle spielen dürften.
[-] Folgende(r) 1 Nutzer sagt Danke an Zwenn für diesen Beitrag:
  • derHoepp
Antworten Top
#8
Moin,

ohne die konkrete Seite zu kennen ist das natürlich stochern im Nebel, aber vom Prinzip her lässt sich das ganze auch mit PowerQuery lösen, in dem du eine Function schreibst, die deine Parameter nimmt und an die Webseite sendet und das Ergebnis dann zurückgibt. Diese Function rufst du dann für jede deiner Datenzeilen auf und fertig. Hier mal am Beispiel Google.

Function fncAskGoogle:
Code:
(searchFor as text, language as text) as text=>
    let
        Quelle = Text.FromBinary(Web.Contents("https://www.google.de/search?q=" & searchFor & "&source=lnt&lr=lang_" & language & "de&sa=X")),
        Ergebnis = Text.Range(Quelle,Text.PositionOf(Quelle,"<body"),80)
    in
        Ergebnis

Beispielaufruf in Abfrage meineDatentabelle:
Code:
let
    Quelle = Excel.CurrentWorkbook(){[Name="meineDatentabelle"]}[Content],
    #"Geänderter Typ" = Table.TransformColumnTypes(Quelle,{{"Spalte1", type text}, {"Spalte2", type text}}),
    #"Höher gestufte Header" = Table.PromoteHeaders(#"Geänderter Typ", [PromoteAllScalars=true]),
    #"Geänderter Typ1" = Table.TransformColumnTypes(#"Höher gestufte Header",{{"Term", type text}, {"Lang", type text}}),
    #"Aufgerufene benutzerdefinierte Funktion" = Table.AddColumn(#"Geänderter Typ1", "AskGoogle", each fncAskGoogle([Term], [Lang]))
in
    #"Aufgerufene benutzerdefinierte Funktion"

Dazu musst du natürlich auch den Rückgabewert analysieren. Im Beispiel nehme ich einfach die ersten 80 Zeichen ab dem ersten body-Tag. Wie performant das ist, wenn du mehr als 1000 Abfragen machst sei dahingestellt. Ob der Seitenbetreiber damit einverstanden ist erst recht. Für mich sieht das wie ein Tracking-Status aus. Wie wäre es, wenn du einfach den Dienstleister anrufst und fragst, wie du an die 1000 aktuellen Status-Werte kommst? Manchmal gibt es auch eine REST-API, die du anzapfen kannst.

Viele Grüße erstmal!
derHöpp
Antworten Top
#9
Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
        <title>ID Trace</title>
    </head>
    <body bgcolor="#ffdead">
        <img src=/kk/icons/logo.gif alt='Logo'>
        <img src=/kk/icons/beschreibung.gif alt='Text'>
        <br>
        <div align="center" style="width: 561; height: 363">
            <p>
                <font size="5">ID TRACE</font>
            </p>
            <hr>
            <p>
                <br>&nbsp;
            </p>
            <form align=center action=ecid.php3 method=GET name=FormName>
                <div align=center style=width: 561; height: 168>
                    <table width=100% border=1 cellspacing=2 cellpadding=0 bgcolor=white height=104>
                        <tr bgcolor=#d2b48c>
                            <td height=75 align=center>
                                <div align=center>
                                    <table width=572 border=1 cellspacing=2 cellpadding=0>
                                        <tr>
                                            <td width=32>
                                                <p align=center>&nbsp;
                                            </td>
                                            <td width=175>
                                                <font size=4>Maschine</font>
                                            </td>
                                            <td width=117>
                                                <font size=4>ID 1</font>
                                            </td>
                                            <td width=93>
                                                <font size=4>ID 2</font>
                                            </td>
                                            <td width=131>
                                                <font size=4>ID 3</font>
                                            </td>
                                            <td width=131>
                                                <font size=4>ID 4</font>
                                            </td>
                                            <td width=131>
                                                <font size=4>ID 5</font>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td width=32>&nbsp;</td>
                                            <td width=175>
                                                <p align=center>
                                                    <input type=text name=eq value=MASCHINE1 size=6 border=0>
                                            </td>
                                            <td width=117>
                                                <p align=center>
                                                    <input type=text name=id1 value=300 size=10 border=0>
                                            </td>
                                            <td width=93>
                                                <p align=center>
                                                    <input type=text name=id2 value=0 size=10 border=0>
                                            </td>
                                            <td width=131>
                                                <p align=center>
                                                    <input type=text name=id3 value=0 size=10 border=0>
                                            </td>
                                            <td width=131>
                                                <p align=center>
                                                    <input type=text name=id4 value=0 size=10 border=0>
                                            </td>
                                            <td width=131>
                                                <p align=center>
                                                    <input type=text name=id5 value=0 size=10 border=0>
                                            </td>
                                        </tr>
                                        <tr>
                                            <td width=32>&nbsp;</td>
                                            <td width=175>&nbsp;</td>
                                            <td width=117 bgcolor=#FFFFFF>193000</td>
                                            <td width=93 bgcolor=#FFFFFF>0</td>
                                            <td width=131 bgcolor=#FFFFFF>0</td>
                                            <td width=131 bgcolor=#FFFFFF>0</td>
                                            <td width=131 bgcolor=#FFFFFF>0</td>
                                        </tr>
                                    </table>
                                </div>
                            </td>
                        </tr>
</tr>
<tr bgcolor=#99ffff>
    <td height=1 align=center>
        <table border=0 cellspacing=2 cellpadding=0 align=center width=250>
            <tr height=40%>
                <td width=238 height=40%>
                    <p align=center>
                        <b>
                            <font size=4>
                                <input type=submit name=start value=Start tabindex=1 border=0>
                            </font>
                        </b>
                </td>
                <td height=40% width=6>&nbsp;</td>
            </tr>
        </table>
    </td>
</tr>
</table><p></p>
</div><p>&nbsp;</p>
</form><p></p>
<p></p>
</div></body></html>

Unten im Code gibt es hier eine Zeile mit 193000  => das ist das ergebnis von id1 (value 300)

wenn man den Link mit den eingesetzten Parametern aufruft bekommt man nach oeffnen des Links sofort die ergebnisse. (ohne den start button zu drücken)
..../trace/index.php3?id="eingesetzter Parameter"&id1="eingesetzter Parameter"&id2="eingesetzter Parameter"&id3="eingesetzter Parameter"&id4="eingesetzter Parameter"&id5="eingesetzter Parameter"&start=Start

ich komme leider nicht an mehr heran, ja der Link greift auf einen Lokalen Server zu!


Gruss

wie würde das in excel ueber vba aussehen?
Antworten Top
#10
Hi,

dann sollte mein Vorschlag ja problemlos umzusetzen sein. Wenn die Seitenstruktur tatsächlich so einfach ist, kannst du das Ergebnis auch direkt als Web.Page auswerten.

Viele Grüße
derHöpp
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste