Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1896to1900
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

Excel als Website-Parser möglich?

Excel als Website-Parser möglich?
14.09.2022 09:45:33
Patrick
Hallo ihr Lieben,
ich bin gestern auf eine (hoffentlich) richtig gute Idee gekommen, um weitere Routinearbeiten, die vom Team auch mal gerne vergessen wird, zu automatisieren.
Ich bin gestern über Scraping gestolpert und schon ging die Spinnerei im Kopf los.
Konstruierte theoretische Aufgabe:
Öffne den Browser (IE? (Annahme: da Microsoft mit Microsoft besser kommunizieren kann)),
Surfe zu Google und suche nach dem Suchbegriff "kostenlose Darlehen": https://www.google.com/search?q=kostenlose+Darlehen
Jetzt wirft Google die Ergebnissen aus und schreibt:

Ungefähr 2.950.000 Ergebnisse (0,44 Sekunden)
Die Anzahl an Ergebnisse möchte ich nun in eine Excel-Tabelle übernehmen.
Idee/Ansatz:
Im Quelltext des HTML-Dokumentes würde ich die Zahl hier finden können
(ich musste die Klammern leider durch { und } ersetzen, da sonst der kopierte HTML-Code von der Forumssoftware "interpretiert wird):

{div id="result-stats"}Ungefähr 2.950.000 Ergebnisse{nobr} (0,44 Sekunden) {/nobr}{/div}
Der Original-Code hier als Image: https://prnt.sc/ko8O2LNbRsxi
Kann ich Excel nun dazu bringen, den Quelltext des HTML-Dokumentes zu durchsuchen (Link wäre ja nun: view-source:https://www.google.com/search?q=kostenlose+Darlehen, um das Quellcode-Dokument zu erhalten) und die (Zeichen-)Position des Ausdrucks "
Ungefähr " zu suchen, damit ich die Zahl auslesen kann?
Hat sowas schon mal jemand gemacht und Erfahrung mit einem Excel-Website-Parser?
LG
Patrick

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Excel als Website-Parser möglich?
14.09.2022 11:01:45
Daniel
Hi
schau dir mal die Funktion XMLFILTERN an.
die ist dafür gemacht, aus Webseiten über die Tags markierte Werte herauszusuchen.
Gruß Daniel
AW: Excel als Website-Parser möglich?
14.09.2022 15:26:51
Yal
Hallo Patrick,
schaue dir
https://www.wiseowl.co.uk/vba-macros/videos/vba-scrape-websites/web-scraping-selenium-chrome/ (57.2)
und die Punkten 57.1, 57.3 usw.
Es wird zuerst mit Chrome erklärt, aber IE, Edge und Co funktionieren genauso. MS-Browser ist in dem Fall nicht relevant.
Wenn Du 365 Business hast, hast Du vielleicht auch Power Automate Desktop. Siehe https://www.youtube.com/watch?v=DgBZiBIgh3w
Excel hat nur 1.048.576 Zeilen. Also 2,9 mio werden nicht gehen :-)
VG
Yal
Anzeige
AW: Excel als Website-Parser möglich?
27.09.2022 11:30:28
Patrick
Hallo Yal,
sorry, komme erst jetzt wieder dazu, mich mit meinem Projekt zu beschäftigen.
Danke für die Quellen... die helfen.
LG
Patrick
AW: Excel als Website-Parser möglich?
14.09.2022 18:20:41
Zwenn
Hallo Patrick,
Google kann im IE gar nicht mehr aufgerufen werden. Der Aufruf wird direkt auf den Edge Browser umgeleitet. Einfach Mal manuell ausprobieren. Insgesamt ist der IE nicht mehr zu gebrauchen. MS hat ihn im Juni 2022 endgültig eingestellt und "bekämpft" ihn aktiv. Viele Webseiten werden inzwischen nach Edge umgeleitet. Edge selbst kann aber aus VBA heraus nicht angesprochen werden. Es gibt jedoch andere Möglichkeiten, wie z.B. xhr (XML HTTP Request).
Leider lässt sich der ganze Bereich Web Scraping nicht in zwei Sätzen abhandeln, sondern ist mit seinen Möglichkeiten und vor allem Problemen, ein sehr weites Feld. Aber es gibt so einige Leute, die diese Disziplin durchaus unter Excel betreiben. Wahrscheinlich sind wir alle samt extrem masochistisch veranlagt ;-)
Mit xhr kann die Anzahl der Suchtreffer als ganzer Satz (weiter ist der in HTML nicht unterteilt) mit dem unten stehenden Code abgerufen werden. Wenn nur die Zahl benötigt wird, müssen weitere String-Operationen angewendet werden, die aber nix mit Web Scraping zu tun haben. (Split() wäre vermutlich eine einfache Möglichkeit.) Ich gebe den Code an, weil er eine Möglichkeit ist, die mir persönlich liegt. Selbst komme ich zwar für meine Belange mit meinem Formelwissen klar, aber die von Daniel genannte kenne ich nicht einmal vom Namen her.
Du solltest Dir die Formel aber unbedingt ansehen, denn mit Formeln sind so einfache Sachen oft viel leichter abzuhandeln.
Noch ein Hinweis zu Google selbst:
Solltest Du vor haben mehr als 35 solcher Anfragen "am Stück" zu machen, hast Du ein Problem. Denn bei einer schnellen Abfolge von Abfragen (Automatisierung), schaltet Google ab Abfrage 36 Captchas. Das bedeutet, mit Automatisierung ist dann nur mit Tricks weiterzukommen. Inzwischen wehren sich so einige Webseitenbetreiber gegen automatisierte Zugriffe.

Sub GoogleAnzahlSuchtreffer()
Const urlBase As String = "https://www.google.com/search?q="
Dim urlSearch As String
Dim doc As Object
Set doc = CreateObject("htmlFile")
With CreateObject("MSXML2.XMLHTTP.6.0")
urlSearch = "kostenlose+Darlehen"
.Open "GET", urlBase & urlSearch, False
.setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:104.0) Gecko/20100101 Firefox/104.0"
.send
If .Status = 200 Then
doc.body.innerHTML = .responsetext
MsgBox doc.getElementByID("result-stats").innertext
Else
MsgBox "Seite konnte nicht geladen werden." & Chr(13) & _
"HTTP Status: " & .Status & Chr(13) & _
"Status Text: " & .StatusText
End If
End With
End Sub
Viele Grüße,
Zwenn
PS: Dass die Anzahl der ausgewiesenen Suchtreffer insgesamt eher mit Vorsicht zu genießen ist weißt Du, nehme ich an. Ansonsten, einfach Mal auf Seite 10 oder 15 gucken, ob die Angezeigten Links im gewünschten Kontext noch viel mit dem gesuchten Thema zu tun haben. Die Treffer werden recht schnell unscharf.
Anzeige
Selenium
14.09.2022 20:32:59
Yal
wie Zwenn es sagt, bin ich wohl gerade, da ich mich viel mit Selenium beschäftige...
der VBA-Selenium Code für dein Anliegen würde ungefähr so aussehen:

Sub Start()
Dim ED As New Selenium.EdgeDriver
Const cLinks = "https://www.google.com/search?q=kostenlose+Darlehen"
ED.Start
ED.Get cLinks
ThisWorkbook.Worksheets(1).Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Resize(1, 2) = Array(cLinks, ED.FindElementById("result-stats").Text)
Set ED = Nothing
End Sub
Scheint ziemlich kompakt und Sexy zu sein. Es ist aber eine Menge Turn-Übungen, bis man diese Ergebnis zusammenbringt. Aber gut, wer nichts wagt, der gewinnt auch nichts.
VG
Yal
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige