Anzeige
Archiv - Navigation
1564to1568
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Abruf von Daten aus WebSeite

Abruf von Daten aus WebSeite
21.06.2017 10:57:14
Daten
Hi
Ich habe eine Excel-Datei mit einer Unzahl an Links.
Das Ziel:
Ich klicke auf einen Link, der Browser öffnet sich, die Werte die IMMER an der gleichen Stelle stehen und die IMMER den gleichen Wert worneweg haben (Adresse:) werden abgegriffen und in die Zelle neben dem Link geschrieben...
Ist das zu realiesieren und wenn ja - ist es aufwändig?
Danke für eure Hilfe
MfG
Daniel

22
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: im Prinzip ja
21.06.2017 11:19:13
Fennek
Hallo,
ähnliche Fragestellungen waren lösbar, aber es hängt auch von vielen Details ab. Ohne es an (wwenigen) Beispielen zu testen, kann keine vernünftige Aussage gemacht werden.
Eine Bsp-Datei mit (von Hand) eingetragener Wunschlösung wäre hilfreich.
mfg
AW: im Prinzip ja
21.06.2017 11:29:49
Daniel
Sehr gerne :-)
Entschuldige, hatte nicht4 dran gedacht...
Also:
Die Seite ist die um die es geht.
Und das Wunschergebnis ist das, wie es neben Firma 1 zu sehen ist.
Ist das verständlich?
https://www.herber.de/bbs/user/114388.xlsx
Anmerkung
21.06.2017 11:54:40
Zwenn
Hallo Daniel und Fennek,
die Seiten lassen sich auslesen. Wenn benötigt, auch die Firmendaten und Handelsregister Infos.
Ich möchte aus Erfahrung nur folgendes mit auf den Weg geben.
Möglichkeit 1:
Es liegen offenbar alle Links zu den entsprechenden Seiten vor. Belasse diese in einer eigenen Tabelle und bau die Struktur der auszulesenden Daten in einer neuen Tabelle auf. Der jeweilige Quellverweis kann einfach in die neue Tabelle übernommen werden. Ansosnten muss man die Links in Spalte A dauernd neu positionieren. Je nachdem, wieviele Zeilen zu einem Kontakt ausgelesen werden.
Möglichkeit 2:
Warum werden die eigentlich in mehrere Zeilen geschrieben? Wäre es nicht sinnvoller, jeden Datensatz in eine Zeile mit fester Kopfzeile zu schreiben? Das wäre wesentlich kompakter, man könnte auf einen Blick sehen, welche Firmen z.B. keine FaxNr angegeben haben, die Daten lassen sich einfach weiter verarbeiten und sie könnten dann auch in die Quellverseistabelle geschrieben werden.
Viele Grüße,
Zwenn
Anzeige
AW: Anmerkung
21.06.2017 12:18:07
Daniel
Für mich ist es gerade etwas umständlich da was neues zu bauen, weil ich über eine miese Internetverbindung über Remote auf einen entfernten Rechner mit noch mieserer Internetleitung zugreifen muss weil ich hier auf dem Gerät kein Excel habe...
Deshalb ist das etwas...umständlich für mich da eine genaue Datei zu erstellen ;)
Die Positionierung, da hast du recht, ist natürlich auf einer zweiten Tabelle sinnvoller und wird unterm Strich dann auch da passieren...
Aber das ist ja nicht weiter schlimm - ich hab nur keine Idee wie ich die Daten aus der WebSeite bekomme und in Excel einfügen kann...
Anzeige
AW: Anmerkung
21.06.2017 13:47:01
Daniel
Endlich...
Hat ein wenig gedauert sorry...
Du meinst das so oder?
Also in der Tabelle "Adressen" einzufügen...
Das Auslesen der GESAMTEN Seite ist kein Problem.
Auch nicht das Einfügen in die andere Tabelle - gut, da landet jetzt alles drin und alles auf einem Haufen....
Aber ich hab z.b. keine Ahnung wie ich da eine Selektion vornehmen kann das er nur bestimmte Daten zieht...
https://www.herber.de/bbs/user/114393.xlsm
AW: Anmerkung
21.06.2017 15:37:40
Zwenn
Hi Daniel,
so funktioniert das nicht. Abgesehen davon, dass es keinen Command Button in deiner Mappe gibt, gibt es auch keine Variable Adresse. Aber mit "so funktioniert das nicht" meine ich vor allem, dass Dein Ansatz falsch ist. Man macht das übers DOM (Document Object Modell). Dafür muss man die Struktur der Seite nutzen, um an die Werte zu kommen. Deshalb ist es auch völlig egal, wo auf der Seite die stehen.
Schau Dir mal hier eine kleine Erklärung zum DOM an:
(Die verlinkte Excel Mappe ist nicht mehr erreichbar)
https://www.herber.de/cgi-bin/callthread.pl?index=1492241#1493245
Falls Fennek nicht dazu kommt, etwas zu basteln, schau ich mir das heute Abend nochmal an, wenn ich zu Hause bin.
Viele Grüße,
Zwenn
Anzeige
AW: kein Quellcode?
21.06.2017 15:00:44
Fennek
Hallo,
beim ersten Aufruf per Hand war es nicht möglich, per rechter Maustaste den Quellcode einzusehen.
Später versuche ich es noch einmal per VBA.
mfg
AW: Erstes Ergebnis
21.06.2017 15:57:22
Fennek
Hallo,
ein erster Entwurf, der den Quellcode ausliest. Sieh dir mal den html-Code an, welche Felder später mit Namen ausgewählt werden sollen.
mfg
https://www.herber.de/bbs/user/114396.txt
Öhhhhm ... ?
21.06.2017 16:44:51
Zwenn
Hallo Fennek,
warum greifst Du nicht einfach auf die Seitenstruktur zu? Mit GetElementsBy BlahBlah("Blub")? In dem von Dir verlinkten Text fehlen die Adress- und Kontaktdaten. Der Quellcode setzt erst weiter unten an. War das Absicht? Mit Deiner Methode müsste man den Quellcode als Text parsen. Finde ich ziemlich mühsam. Oder was war Deine Idee?
Ich kann den Seitenquelltext ganz normal einsehen. Habe die Beispiel-Seiten zur Quelltext-Sichtung im Firefox geöffnet.
Viele Grüße,
Zwenn
Anzeige
AW: Öhhhhm ... ?
21.06.2017 17:45:34
Daniel
Ich danke euch für eure Mühe...
Ich muss jetzt erstmal weg weil bei einem Kunden ein Ausfall ist - also werd ich nicht vor 21 Uhr wieder da sein fürchte ich...
Ich komm also frühestens morgen dazu es durchzugehen :(
Tut mir leid...
AW: Wie auslesen?
21.06.2017 18:14:40
Fennek
Hallo,
vorhin hatte ich MS Edge genutzt und konnte keinen Quellcode sehen, mit Firefox geht es.
Die gesuchten Werte sind im Element "itemprop" mit den passenden Namen, aber wie lese ich die aus?
mfg
(Daten von http://www.firmendb.de/firmen/7063031.php)
AW: Testlauf
21.06.2017 20:41:13
Fennek
Hallo,
der Code benötigt:
* die genannten Verweise
* ein zweites Sheet für die Ausgabe
Ein erster Testlauf sah recht gut aus.

'Reference to
'1) Microsoft XML, v6.0 (or whatever version you have)
'2) Microsoft HTML Object Library
Private Declare Sub Sleep Lib "kernel32.dll" ( _
ByVal dwMilliseconds As Long)
Sub Fen()
Dim XMLReq As New MSXML2.XMLHTTP60
Dim HTMLDoc As New MSHTML.HTMLDocument
Dim HTMLLinks As MSHTML.IHTMLElementCollection
Dim HTMLLink As MSHTML.IHTMLElement
Dim Hy As Hyperlink
Sheets(1).Activate
For Each Hy In ActiveSheet.Columns(1).Hyperlinks
'Debug.Print Hy.Address
XMLReq.Open "Get", Hy.Address, False
XMLReq.send
Do Until XMLReq.Status = 200: Sleep (100): Loop
HTMLDoc.body.innerHTML = XMLReq.responseText
With Sheets(2)
lr = .Cells(Rows.Count, "A").End(xlUp).Row + 1
Sp = 2
For Each HTMLLink In HTMLDoc.getElementsByTagName("dd")
'Debug.Print HTMLLink.innerText
If Sp = 8 Then
.Cells(lr, 1) = HTMLLink.innerText
Exit For
End If
.Cells(lr, Sp) = HTMLLink.innerText
Sp = Sp + 1
Next
End With
Next Hy
End Sub
mfg
(Die GPS-Adresse steht auch auf der Seite, wird das benötigt?)
Anzeige
Einfach den IE verwenden
22.06.2017 02:02:39
Zwenn
Hallo Daniel und Fennek,
da Microsoft Edge nicht mehr als COM Anwendung für Excel unterstützt, hast Du es über die Empfehlung von MS versucht, wie man unter Windows 10 Daten aus dem Internet holen soll oder? Habe mir das bisher nur kurz angesehen und noch nix damit ausprobiert. Da der IE nach wie vor Bestandteil des OS ist, kann man ihn auch einfach weiterhin verwenden.
Ich habe jetzt nicht so superviel kommentiert. Aber das Makro in der Mappe funktioniert zumindest für die 3 Beispieladressen. Da ist sicher noch viel Feinschliff möglich, aber es ist schon spät heute. Adressen in Spalte A der Tabelle "Adress-Links" kopieren und das Makro "AdressenHolen" starten.
Man kann noch mehr Daten von den Seiten holen. Z.B. Breiten- und Längengrade, wie Du schon angemerkt hast Fennek. Ich habe es jetzt aber bei dem Teil belassen, den Du wolltest Daniel.
https://www.herber.de/bbs/user/114402.xlsm
Viele Grüße,
Zwenn
Anzeige
Variable vergessen
22.06.2017 02:11:03
Zwenn
Habe die Mappe nochmal hochgeladen. Hatte vergessen die Variable für das automatische Scrolling zur Laufzeit richtig zu setzen.
https://www.herber.de/bbs/user/114403.xlsm
AW: Variable vergessen
22.06.2017 07:25:28
Daniel
Hi
Ich habs jetzt erst getestet - das ist genial...
Frage:
Nach etwa 12 Adressen die auch einwandfrei ausgelesen wurden - habe ich jetzt das Problem, dass ich die Seite nicht mehr erreiche...
Ich hab das mittlerweile auch schon versucht mit unterschiedlichen Browsern und auf unterschiedlichen Rechnern - denn angeblich soll die Seite erreichbar sein - aber ich bekomme keine Verbindung dazu...
Kann das an einer Überschreitung der Zugriffe liegen?
Und DANKE für die Arbeit!
Anzeige
AW: Variable vergessen
22.06.2017 10:44:16
Zwenn
Hallo Daniel,
wie gesagt, habe ich es nur mit den 3 von Dir gelieferten Links probiert. Ich hatte noch überlegt, ob ich etwas zu Sperren durch automatische Zugriffe schreibe. Da es bei vielen Webseiten so eine Sperre aber nicht gibt oder die Anzahl der Zugriffe schon recht hoch liegt (mehrere 100), wollte ich keine Verwirrung stiften.
Selbst kann ich es grade nicht testen. Es kann aber sein, dass wirklich eine Sperre bei zu vielen Zugriffen vorliegt und diese sogar sehr niedrig angesetzt ist, weil es sich ja um Kontaktdaten handelt. Die sind halt nicht ganz unproblematisch.
Zum Umgehen solcher Sperren kann man meiner Erfahrung nach folgendes versuchen:
1. Eine Pause nach einer Anzahl Zugriffen einlegen, die noch funktioniert. Wie lang die Pause sein muss, muss man austesten. Z.B auf eBay sind es nach etwa 400 Zugriffen 10 Minuten. Sonst kommt eine Captcha Seite und alle meine Kollegen freuen sich ;-)
2. Eine kurze Pause nach jedem einzelenen Zugriff einbauen. So kann man versuchen dem Server vorzugaukeln, es handelt sich um manuelle Zugriffe. Wie inhomoghen und wie lang die Pausen sein müssen, muss man austesten.
3. Die IP Adresse wechseln, da diese vermutlich auf einer Black List auf Zeit landet. Das funktioniert heute nicht mehr so einfach, wie noch zu Modemzeiten. Bei einem Kabel Deutschland Anschluss funktioniert es nach meiner Erfahrung gar nicht. Man erhält auch nach einer halben Stunde wieder die gleiche IP, wenn man dem Kabelmodem das Kabel zieht. Hat man gar keinen Zugriff auf den Internetanschluss (z.B. in großen Firmen), fällt diese Möglichkeit eigentlich von vorn herein flach.
4. Falls die Seite mit Seassion IDs arbeitet, muss man die irgendwie loswerden. Das geht entweder über eine Pause, wie unter Punkt 1 genannt oder bei einer rein clientseitigen Lösung vielleicht durch das Löschen von Cookies. Letzteres ist aber eher unwahrscheinlich nehme ich an. Ansonsten habe ich dazu keine Idee.
Um zu testen, was passiert, wenn die Grenze erreicht wird, setze mal
browser.Visible = False

auf
browser.Visible = True

Damit wird der IE bei jedem Zugriff eingeblendet. Falls der zu schnell wieder zugeht, kommentiere das schließen des Browsers aus.

'browser.Quit
'Set browser = Nothing
Vermutlich steht da dann das gleiche drin, wie bei Deinen manuellen Versuchen, nachdem es nicht mehr ging. Dann versuche es nach 10 Minuten nochmal manuell. Wenn es dann wieder geht, müssen die 10 Minuten Pause ins Makro eingebaut werden. Du kannst dann versuchen das minimale Zeitintervall zu finden. Kann aber auch sein, dass es ein größeres Zeitintervall ist. Damit zieht sich das Auslesen zwar, aber immer noch besser, als die Daten manuell von den Seiten zu holen. Wie viele Links hast Du denn insgesamt?
Viele Grüße,
Zwenn
Anzeige
Keine Sperre nach X Zugriffen
23.06.2017 00:10:54
Zwenn
Hallo Daniel,
jetzt habe ich mir 40 Links in die Tabelle kopiert. Beim ersten Versuch sind nur 4 ausgelesen worden, dann stand das Ganze. Ich habe dann den IE über den Task Manager beendet, was zu einer Fehlermeldung von Excel führte. Das bedeutet, das Makro lief noch, aber der IE ist hängen geblieben. Ansonsten hätte Excel in dieser Situation nicht mehr reagiert. Ich habe den IE dann auf visible = true gestellt. Beim zweiten Versuch gingen brav alle 40 Browserfenster auf und schlossen sich wieder. Die Daten waren danach alle da.
Dieses Phänomen kenne ich. Der IE ist leider manchmal etwas zickig. Ich empfehle alle AddOns im IE zu deaktivieren und ausschließlich AddBlockPlus als AddOn laufen zu lassen. Das klappt in der Regel ganz gut.
Weiterhin kann man das Makro dahingehend verändern, dass es nach einer Unterbrechung einfach da weiter macht, wo es unterbrochen wurde. Auch das Speichern nach X geholten Adressen kann man einbauen, falls man Excel mal hart beenden muss. Ob sich das lohnt hängt vom Umfang der Nutzung ab. Ohne Erweiterung des Makros dahingehend, muss man eben das was schon da ist, in eine andere Tabelle kopieren und die abgearbeiteten Liks auch in eine andere Tabelle verschieben.
Es gibt auch einen Fehler. Die Mail- und Web-Adresse zu einer Firma habe ich fest auf bestimmte a-Tags programmiert. Wenn diese Daten aber nicht hinterlegt sind, werden andere a-Tags oder kein a-Tag ausgelesen. Letzteres Verhalten soll immer so sein, wenn die Daten nicht da sind. Dafür kann man auch Attribute abfragen. Das hatte ich mir an der Stelle gespart ;-)
Hast Du inzwischen schon Daten ausgelesen oder hast Du es nicht noch einmal ausprobiert?
Viele Grüße,
Zwenn
Anzeige
AW: Frage: Zeichensatz
22.06.2017 09:27:47
Fennek
Hallo Zwenn,
bei deinem Code habe ich noch die Konstruktion mit "Set Knoten = " gelernt, danke.
Bei meinem Code gab es ein Problem mit dem Zeichensatz: die Webseite nutzt den Zeichensatz ", der in meinem Code die Umlaute falsch darstellt. Wie kann man damit umgehen?
mfg
AW: Frage: Zeichensatz
22.06.2017 10:49:52
Zwenn
Hallo Fennek,
freut mich, dass Du noch Anregungen für Dich gefunden hast :-)
Wie gesagt, habe ich Deine Methode bisher noch nicht verwendet. Allerdings dürfte die Zeichencodierung davon unberührt sein. Ich habe die Erfahrung gemacht, dass sämtliche HTML Codierungen von Excel automatisch richtig umgesetzt werden. Da bin ich mir so sicher, weil ich z.B. auch eine französische Seite auslese und sämtliche Sonderzeichen richtig dargestellt werden, obwohl sie im HTML Code entsprechend codiert sind. Ich war damals sehr erleichtert, dass ich mich nicht um diese kümmern muss.
Abgesehen davon wird doch z.B. das ö aus Altöttingen gar nicht codiert auf den Seiten, die Daniel verlinkt hat. Das steht da wirklich als ö drin. An welcher Stelle bekommst Du denn Fehler angezeigt und wie sehen die aus?
Viele Grüße,
Zwenn
AW: Frage: Zeichensatz
22.06.2017 11:14:32
Fennek
Hallo Zwenn,
ich habe mir diese FRage ausgesucht, weil ich bei Web-Zugriffen noch recht wenig Erfahrung habe und dazu lernen möchte (noch weniger Erfahrung habe ich bei API-Funktionen, aber Nepumuk ist da sehr lehrreich)
Da in meinem Ansatz der Code fast zufällig ausgelesen wird, trifft es vermutlich diese Quellcode:

Neueintragungen

07.01.2011 VS Solar Energieanlagen GmbH, Altötting, Loretostr. 13 a, 84503 Altötting.
In der Zelle steht danach nur ein Sonderzeichen.
mfg
Hier im Browser stimmt es, aber der Code ist "Alt & ouml;tting" (ohne Leerzeichen um das Kaufmansund.
AW: Frage: Zeichensatz
22.06.2017 13:55:12
Zwenn
Hallo Fennek,
wie gesagt, kann ich Dir nicht sagen, warum Du die HTML-Codierung angezeigt bekommst. Vielleicht setzt Excel die Codes doch nicht selbst um, sondern der Internet Explorer liefert bereits die richtigen Zeichen über browser.document aus.
In einem Projekt bilde ich Dateinamen aus bestimmten Textstellen einer Webseite. Da es verbotene Zeichen für Dateinamen gibt, müssen diese auch umcodiert werden. Ich setze dafür die dezimalen HTML-Codes ein. Das ist jetzt aber eher Zufall. Ich habe die Codierung willkürlich gewählt.
Du kannst Deine Texte auch so behandeln. Nur eben in die andere Richtung. Wichtig ist halt, dass Du alle Sonderzeichen erwischt. Aber die Liste lässt sich leicht erweitern.
Das ist meine Funktion für speicherkonforme Dateinamen:
(Ich habe wegen der Darstellung hinter das Kaufmanns-Und auch immer ein Leerzeichen gesetzt)

Function StringSpeicherKonform(Zeichenkette As String) As String
Dim ZeichenZuPruefen As String
Dim ZeichenketteSpeicherkonform As String
Dim i As Long
ZeichenketteSpeicherkonform = ""
For i = 1 To Len(Zeichenkette)
ZeichenZuPruefen = Mid(Zeichenkette, i, 1)
Select Case ZeichenZuPruefen
Case "\":  ZeichenZuPruefen = "& #92;"
Case "/":  ZeichenZuPruefen = "& #47;"
Case ":":  ZeichenZuPruefen = "& #58;"
Case "*":  ZeichenZuPruefen = "& #42;"
Case "?":  ZeichenZuPruefen = "& #63;"
Case """":  ZeichenZuPruefen = "& #34;"
Case "":  ZeichenZuPruefen = "& #62;"
Case "|":  ZeichenZuPruefen = "& #124;"
End Select
ZeichenketteSpeicherkonform = ZeichenketteSpeicherkonform & ZeichenZuPruefen
Next i
StringSpeicherKonform = ZeichenketteSpeicherkonform
End Function

Viele Grüße,
Zwenn
AW: Dank owT
22.06.2017 14:12:17
Fennek

304 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige