Microsoft Excel

Herbers Excel/VBA-Archiv

Abruf von Daten aus WebSeite


Betrifft: Abruf von Daten aus WebSeite von: Daniel
Geschrieben am: 21.06.2017 10:57:14

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

  

Betrifft: AW: im Prinzip ja von: Fennek
Geschrieben am: 21.06.2017 11:19:13

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


  

Betrifft: AW: im Prinzip ja von: Daniel
Geschrieben am: 21.06.2017 11:29:49

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


  

Betrifft: Anmerkung von: Zwenn
Geschrieben am: 21.06.2017 11:54:40

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


  

Betrifft: AW: Anmerkung von: Daniel
Geschrieben am: 21.06.2017 12:18:07

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...


  

Betrifft: AW: Anmerkung von: Daniel
Geschrieben am: 21.06.2017 13:47:01

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


  

Betrifft: AW: Anmerkung von: Zwenn
Geschrieben am: 21.06.2017 15:37:40

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


  

Betrifft: AW: kein Quellcode? von: Fennek
Geschrieben am: 21.06.2017 15:00:44

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


  

Betrifft: AW: Erstes Ergebnis von: Fennek
Geschrieben am: 21.06.2017 15:57:22

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


  

Betrifft: Öhhhhm ... ? von: Zwenn
Geschrieben am: 21.06.2017 16:44:51

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


  

Betrifft: AW: Öhhhhm ... ? von: Daniel
Geschrieben am: 21.06.2017 17:45:34

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...


  

Betrifft: AW: Wie auslesen???? von: Fennek
Geschrieben am: 21.06.2017 18:14:40

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)


  

Betrifft: AW: Testlauf von: Fennek
Geschrieben am: 21.06.2017 20:41:13

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?)


  

Betrifft: Einfach den IE verwenden von: Zwenn
Geschrieben am: 22.06.2017 02:02:39

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


  

Betrifft: Variable vergessen von: Zwenn
Geschrieben am: 22.06.2017 02:11:03

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


  

Betrifft: AW: Variable vergessen von: Daniel
Geschrieben am: 22.06.2017 07:25:28

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!


  

Betrifft: AW: Variable vergessen von: Zwenn
Geschrieben am: 22.06.2017 10:44:16

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


  

Betrifft: Keine Sperre nach X Zugriffen von: Zwenn
Geschrieben am: 23.06.2017 00:10:54

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


  

Betrifft: AW: Frage: Zeichensatz von: Fennek
Geschrieben am: 22.06.2017 09:27:47

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


  

Betrifft: AW: Frage: Zeichensatz von: Zwenn
Geschrieben am: 22.06.2017 10:49:52

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


  

Betrifft: AW: Frage: Zeichensatz von: Fennek
Geschrieben am: 22.06.2017 11:14:32

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.


  

Betrifft: AW: Frage: Zeichensatz von: Zwenn
Geschrieben am: 22.06.2017 13:55:12

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 = "& #60;"
        Case ">":  ZeichenZuPruefen = "& #62;"
        Case "|":  ZeichenZuPruefen = "& #124;"
    End Select
            
    ZeichenketteSpeicherkonform = ZeichenketteSpeicherkonform & ZeichenZuPruefen
Next i

StringSpeicherKonform = ZeichenketteSpeicherkonform

End Function

Viele Grüße,

Zwenn


  

Betrifft: AW: Dank owT von: Fennek
Geschrieben am: 22.06.2017 14:12:17




Beiträge aus den Excel-Beispielen zum Thema "Abruf von Daten aus WebSeite"