AW: XML Pfad
11.11.2018 20:03:02
Zwenn
Hallo Christoph,
ich kenne die Formel IMPORTXML nicht, die Du verwendest. Ich kenne mich aber leidlich mit dem DOM aus (Document Object Model) und denke, der Pfad, den Du in dem Quelltext der Seite suchst, den gibt es gar nicht und deshalb funktioniert es auch nicht. Der Grund (soweit ich es nachvollziehen kann) dürfte sein, dass Du mit einer XML Funktionalität auf einen HTML Quellcode zugreifst. In der Theorie mag das eine gute Idee sein, weil HTML streng genommen eine Untermenge der Möglichkeiten von XML ist. HTML darf man im Sinne von XML aber nie streng nehmen, wenn man nicht Schiffbruch erleiden will. Das Stichwort hier ist wohlgeformt. Genau das ist nämlich die Voraussetzung, um XML konform arbeiten zu können. HTML ist schon dann nicht mehr wohlgeformtes XML, wenn ein einfaches BR-Tag auftaucht. Denn das wird in der Regel nicht wieder geschlossen und aus die Maus.
http://wiki.selfhtml.org/wiki/XML/Regeln/Wohlgeformtheit
Die Erklärung zu dem was bei Dir funktioniert und was nicht
(Ich gehe im Folgenden davon aus, dass Du HTML beherrschst)
Deine Formel: =index(IMPORTXML($B2;"//h1[@class='companyName__99a4824b']");1)
Der hinterlegte HTML-Pfad, der ein Pfad im DOM ist, besagt: Finde das erste H1-Tag mit dem Klassennnamen "companyName__99a4824b"
Ruft man den Quellcode der Seite auf und sucht nach h1, findet man das erste H1-Tag und es hat die Klasse "companyName__99a4824b" zugewiesen. Deshalb bekommst Du mit Deiner Formel den richtigen Wert ausgelesen.
<h1 class="companyName__99a4824b">
adidas AG
</h1>
Deine Formel =index(IMPORTXML($B2;"//div[@class='contentWell__b0c648c9']");19)
Wie Du richtig erkannt hast, wird hier ein ganzer HTML-Block ausgelesen. Den gebe ich hier nicht wieder, weil der wirklich einigermaßen groß ist (1.512 Zeilen). Genau weil er das ist, kannst Du ihn in der Form ja auch nicht brauchen ;-)
Nun gibt Dir ein Werkzeug namens XpathHelper einen Pfad zur Befriedigung Deines Wunsches zurück, der aber nicht funktioniert:
/html/body/div[@id='root']/div/div[@class='contentWell__b0c648c9']/section[@class='quotePageMainContent page-modules']/section[@class='companyProfile__1e6c0f88']/div/section[@class='left__3cc58f98 description__bff5f1e8']
Wenn Du versuchst diesem Pfad im Quellcode der von Dir verlinkten Seite zu verfolgen, kommst Du nicht bis zum Ende. Der Pfad funktioniert nur bis:
/html/body/div[@id='root']/div/div[@class='contentWell__b0c648c9']/section[@class='quotePageMainContent page-modules']/section[@class='companyProfile__1e6c0f88']
Dann hast Du das folgende HTML-Fragment am Wickel:
<section class="companyProfile__1e6c0f88">
<div itemscope="" itemType="http://schema.org/Corporation">
<h2 class="name__7f85bf4e"> <span>About adidas AG </span> </h2> _
<section class="left__3cc58f98 description__bff5f1e8" itemProp="description"> _
adidas AG ... </section>
<section class="companyInfo right__44a4adf7">
<section class="dataBox address ">
<header class="title__49417cb9"> <span>Address </span> </ _
header>
<div class="value__b93f12ea">Adi-Dassler-Strasse 1
Herzogenaurach , 91074
Germany </div>
</section>
<section class="dataBox phone ">
<header class="title__49417cb9"> <span>Phone </span> </ _
header>
<div class="value__b93f12ea">49-9132-84-0 </div>
</section>
<section class="dataBox website__a0690a57">
<header class="title__bcf6f21e"> <span>Website </span> </ _
header> <a href="https://www... </a>
</section>
</section>
<section class="fundDetails__a5aa2a86"> </section>
</div>
</section>
In diesem Teil des Seiten Quellcodes findet der Teil /div/section[@class='left__3cc58f98 description__bff5f1e8'] nicht mehr statt. Deshalb erhältst Du auch nicht das gewünschte Ergebnis.
Bisher wußte ich persönlich gar nicht, dass sich Inhalte von Seiteninhalten (oder eher von wohlgeformtem XML) auch über eine einfache Formael auslesen lassen. Ich lese Seiteninhalte bisher immer über das DOM aus, unter Zuhilfenahme des Internet Explorers.
Viele Grüße,
Zwenn