AW: Google Patent Treffer je Zeile anzeigen
06.06.2019 16:58:03
Zwenn
Hallo Laura,
Du hast in Deinem ClassName einen Bindestrich vergessen. Nicht "style-scope search results" sondern "style-scope search-results". Das ist aber egal, denn diese CSS-Klasse wird auf der Seite so wahnsinnig oft verwendet, dass sie völlig ungeeignet für Deine Zwecke ist. Deshalb habe ich mir das mal näher angesehen, habe mich im DOM-Inspector durchgeklickt und ein paar Versuche aus Excel heraus für den Seitenaufruf getestet.
Der Such-Container ist in einem Tag namens "section" gekapselt. Das gibt es auch nur einmal auf der Seite. Also kann man es direkt abgreifen. Innerhalb des HTML-Bereichs von "section" werden die Suchtreffer in Tags namens "article" gekapselt. Unter Deinem Testlink gibt es 10 davon. Die kann man in einer For-Each Schleife durchgehen.
Das folgende Makro geht bis zu diesem Punkt und listet den Text jedes article in einer Zelle der aktuellen Tabelle ab A1 nach unten auf:
Sub GooglePatents()
Const googleGrundURL As String = "https://patents.google.com/"
Dim browser As Object
Dim url As String
Dim suchTermURL As String
Dim knotenSectionTag As Object
Dim knotenArticleTags As Object
Dim knotenArticel As Object
Dim zeile As Long
suchTermURL = "?q=(preparation)+OR+(method*)+AND+(oral)+intitle:aspirin"
url = googleGrundURL & suchTermURL
'Internet Explorer initialisieren, Sichtbarkeit festlegen,
'URL aufrufen und warten bis Seite vollständig geladen wurde
Set browser = CreateObject("internetexplorer.application")
browser.Visible = True
browser.Navigate url
Do Until browser.ReadyState = 4: DoEvents: Loop
'Manuelle Wartezeit, damit der Suchergebnis-Container nachgeladen werden kann
'Application.Wait (Now + TimeSerial(pause_stunden, pause_minuten, pause_sekunden))
Application.Wait (Now + TimeSerial(0, 0, 3))
'Der Google Suchergebnis-Container steht im ersten und einzigen Tag namens section
Set knotenSectionTag = browser.document.getElementsByTagName("section")(0)
If Not knotenSectionTag Is Nothing Then
'Die Suchtreffer sind in Tags namens article gekapselt
Set knotenArticleTags = browser.document.getElementsByTagName("article")
For Each knotenArticel In knotenArticleTags
zeile = zeile + 1
Cells(zeile, 1).Value = knotenArticel.innertext
Next knotenArticel
Else
MsgBox "kein Treffer"
End If
End Sub
Ich weiß nicht, ob Du ab der Stelle weiter kommst. Aber der HTML-Quelltext eines einzelnen article hat folgenden Aufbau, aus dem Du Dir die gewünschten Werte raussezieren kannst:
(Die Zeilenumbrüche mit den Unterstrichen am Ende kommen von der Forensoftware)
<article class="result style-scope search-result-item">
<state-modifier class="result-title style-scope search-result-item" act='{"type": " _
OPEN_RESULT", "result": "$result"}' data-result="patent/NO156816B/en">
<a class="style-scope state-modifier" id="link" href="#">
<h3 class="style-scope search-result-item">
<raw-html class="style-scope search-result-item">
<span class="style-scope raw-html" id="htmlContent" style="display: inline;">
A method for preparing an oral farmasoeytisk preparation of aspirin.
</span>
</raw-html>
</h3>
</a>
</state-modifier>
<div class="abstract layout horizontal start style-scope search-result-item">
<div class="figureViewButtonWrap style-scope search-result-item">
<img class="thumbnail style-scope search-result-item" style="display: none;" src=""> _
<div class="figureViewButton layout horizontal style-scope search-result-item">
<iron-icon class="style-scope search-result-item x-scope iron-icon-0" icon="icons: _
chevron-right">
<svg xmlns="http://www.w3.org/2000/svg" class="style-scope iron-icon"
style="width: 100%; height: 100%; display: block; pointer-events: none;" viewBox= _
"0 0 24 24"
preserveAspectRatio="xMidYMid meet" focusable="false">
<g class="style-scope iron-icon">
<path class="style-scope iron-icon" d="M 10 6 L 8.59 7.41 L 13.17 12 l -4.58 4. _
59 L 10 18 l 6 -6 Z" />
</g>
</svg>
</iron-icon>
</div>
</div>
<div class="flex style-scope search-result-item">
<h4 class="metadata style-scope search-result-item">
<span class="active style-scope search-result-item">EP</span>
<span class="not_active style-scope search-result-item">US</span>
<span class="active style-scope search-result-item">JP</span>
<span class="active style-scope search-result-item">AU</span>
<span class="not_active style-scope search-result-item">CA</span>
<span class="not_active style-scope search-result-item">DE</span>
<span class="not_active style-scope search-result-item">DK</span>
<span class="not_active style-scope search-result-item">FI</span>
<span class="unknown style-scope search-result-item">GR</span>
<span class="unknown style-scope search-result-item">IE</span>
<span class="unknown style-scope search-result-item">NO</span>
<span class="unknown style-scope search-result-item">NZ</span>
<span class="unknown style-scope search-result-item">PT</span>
<span class="unknown style-scope search-result-item">ZA</span>
<template class="style-scope search-result-item" is="dom-repeat"></template> _
<span class="bullet-before style-scope search-result-item">
<template class="style-scope search-result-item" is="dom-if"></template>
<span class="style-scope search-result-item">NO156816B</span>
<template class="style-scope search-result-item" is="dom-if"></template>
</span>
<span class="style-scope search-result-item">
<span class="bullet-before style-scope search-result-item">
<raw-html class="style-scope search-result-item">
<span class="style-scope raw-html" id="htmlContent" style="display: inline;"& _
gt;
Curt Henry Appelgren
</span>
</raw-html>
</span>
</span>
<span class="style-scope search-result-item">
<span class="bullet-before style-scope search-result-item">
<raw-html class="style-scope search-result-item">
<span class="style-scope raw-html" id="htmlContent" style="display: inline;"& _
gt;
Haessle Ab
</span>
</raw-html>
</span>
</span>
</h4>
<h4 class="dates style-scope search-result-item">
Priority 1981-04-27 Filing 1982-04-26 Publication 1987-08-24
</h4>
<template class="style-scope search-result-item" is="dom-if"></template>
<raw-html class="style-scope search-result-item">
<span class="style-scope raw-html" id="htmlContent" style="display: inline;"></ _
span>
</raw-html>
</div>
<template class="style-scope search-result-item" is="dom-if"></template>
<template class="style-scope search-result-item" is="dom-if"></template>
</div>
</article>
Falls Du damit nicht klar kommst, sag mal bescheid, was Du auslesen willst. Am besten dann mit Beispielmappe, in der man sehen kann, welche Werte wo hingeschrieben werden sollen.
Viele Grüße,
Zwenn