/ / Probleme mit Xpath in Google Spreadsheets (ImportXML) - XML, Xpath, Google-Spreadsheet

Probleme mit Xpath in Google Spreadsheets (ImportXML) - XML, XPath, Google-Tabellenkalkulation

Dies ist eine großartige Seite, und ich hatte bereits eine Mengevon Fragen einfach durch Scrollen und Durchsuchen von anderen Beiträgen beantwortet. Leider kann ich anscheinend keine Antwort finden, die speziell für dieses Problem hilfreich ist, und dachte mir, ich würde versuchen, etwas zu posten und nach Hilfe zu suchen.

Ich verwende ImportXML und Google Spreadsheets, um ein paar Produktbeschreibungen von einer Einzelhandels-Website zu "scrappen". Es hat größtenteils gut funktioniert und ich habe es auf zwei Arten gemacht:

1) Spezifischer Aufruf des Beschreibungsteils eines Beitrags:

=ImportXML(A1,"//div[@class="desc"]")

2) Rufen Sie die gesamte "Produktkarte" auf, die auch Informationen wie Produkttitel, Preis und Uhrzeit zurückgibt und diese Elemente in benachbarten Zellen in meiner Google-Tabelle platziert:

=ImportXML(A1,"//div[@class="productCard"]")

Beide haben gut funktioniert, aber ich bin auf eine gestoßenunterschiedliche Probleme mit jeder Methode. Wenn ich auch nur eines dieser Probleme lösen kann, werde ich die andere Methode gerne ausrangieren. Ich brauche nur eine davon, um zu funktionieren. Die Probleme sind:

Methode 1) Die Website verbietet Verkäufern vonEinschließen von Kontaktinformationen in Produktpostings - Wenn sie dennoch eine E-Mail-Adresse enthalten, wird sie von der Site automatisch blockiert, sodass sie in der Postings einfach als "... Sie können mich unter [verdeckt] erreichen" oder so ähnlich angezeigt wird. Das [Verschleierte] erscheint in einem anderen Farbtext und wird offensichtlich irgendwie anders behandelt. Wenn ich diese Beschreibungen mit Methode 1 abschabe, scheint ImportXML "bestoßen" zu werden, wenn es das Wort [verdeckt] trifft, und es hat den restlichen Text von dieser Produktbeschreibung an die nächste Zelle in meiner Tabelle weitergegeben. Dies ruiniert die gesamte Organisation des Arbeitsblatts, und ich würde gerne einen Weg finden, wie ich ImportXML dazu bringen kann, das [obscured] einfach zu ignorieren und dennoch den gesamten Text der Produktbeschreibung in einer Zelle zu platzieren.

Methode 2) Mein Anruf für die gesamte "Produktkarte" lautet wie folgt:

=ImportXML(A1,"//div[@class="productCard"]")

Wie bereits erwähnt, funktioniert dies gut (für die meistenProdukte), und es macht mir nichts aus, dass die zusätzlichen Informationen (Preis, Datum usw.) in den benachbarten Zellen angezeigt werden. Auf der Website können jedoch auch bestimmte Produkte "vorgestellt" werden, die in einem anderen Farbfeld auf der Website angezeigt werden und daher eher die Aufmerksamkeit eines Käufers auf sich ziehen. Mit dieser Methode werden die "vorgestellten" Produkte nicht geschabt oder in meine Tabelle importiert, sondern einfach weitergereicht.

Der Quellcode (auf der tatsächlichen Website) (über "inspizieren")Das Element "in Safari" für die Beschreibung (Methode 1) und die Produktkarte (Methode 2) sieht wie folgt aus (für ein normales Produkt (a) und ein vorgestelltes Produkt (b)):

(ein)

<div id="productSearchResults">
<div class="productCard tracked">
<div>...</div>
<div class="stats">...</div>
<div class="desc collapsed descFull">...</div>
</div>

(b)

<div id="productSearchResults">
<div class="productCard featured tracked">
<div>...</div>
<div class="stats">...</div>
<div class="desc collapsed descFull">...</div>
</div>

Sie können in beiden (a) und (b) die "desc" -Klasse sehendass ich in Methode 1 aufrufen, die gut zu funktionieren scheint. Aus meiner Lektüre auf dieser Website habe ich herausgefunden, dass eine bestimmte Klasse nicht mehr als ein Wort enthalten kann, und daher wurde die Verwendung von "desc collapsed descFull" und "productCard tracked" und "productCard featured tracked" nicht verwendet Klassen mit 3, 2 und 3 Wörtern im Titel darstellen, aber stattdessen Fälle, in denen mehrere Klassen zugewiesen wurden?

Unabhängig davon funktioniert der Aufruf von "desc" (Methode 1)gut und scheint alle beschreibungen zu bekommen. In Methode 2 hätte ich daher gedacht, dass ein Aufruf von "productCard" die Informationen für alle Produkte, sowohl vorgestellten als auch regulären, erhalten würde, da "vorgestellten" eine zusätzliche Klasse ist, die einigen "productCard" zugewiesen ist. Wenn ich alle "productCard" s aufrufe, sollten nicht die normalen UND-gekennzeichneten zurückgegeben werden? Dies ist derzeit nicht der Fall. Ich habe versucht, nur "verfolgt" und nur "gekennzeichnet" als Klassen aufzurufen, und habe auch nichts zurückgegeben Meine Logik, dass sie ihre eigene Klasse sind, die "productCard" entspricht, kann fehlerhaft sein.

Zusammenfassend funktioniert der Aufruf "desc" in Methode 1gut, und bekommt sogar Beschreibungen für "vorgestellten" Produkte. Wenn jedoch Kontaktinformationen in der Beschreibung enthalten sind und als [verdeckt] angezeigt werden, werden meine Daten unmittelbar nach dem Wort in die nächste Zelle der Tabelle verschoben. Dies wirft ab und ruiniert die gesamte Organisation.

Bei Methode 2 werden die vorgestellten Produkte überhaupt nicht angezeigt, was meine Bemühungen erheblich schwächt. Kann eines (oder beide!) Dieser Probleme behoben werden?

Vielen Dank für jede Hilfe, die Sie mir geben können.

***AKTUALISIEREN: Wie in den Kommentaren unten zu sehen ist, wurde die Methode 2 durch Verwendung des "Enthaltens" verbessert, indem sowohl reguläre als auch vorgestellte Produkte abgerufen wurden. Besondere Produktkarten enthalten jedoch zusätzliche Textelemente. Da bei dieser Methode die gesamte Karte abgeschabt wird, stimmen die besonderen Produkte nicht mit der Zellenausrichtung überein, die bei herkömmlichen Produkten erzielt wird. Wenn es eine Möglichkeit gibt, Methode 1 zu beheben, wäre dies daher viel besser. Wie in den Kommentaren unten ausgeführt, wird der [verdeckte] Text in einem "Bereich" angezeigt, der unter / eingerückt von folgt

<div class="desc descFull collapsed"

wie

<span class="obscureText">[obscured]</span>

Gibt es eine Möglichkeit, wie ich die "desc" s importieren kannIch war es schon, aber sage dem XPath, er solle die [verdeckte] Zeitspanne im Wesentlichen "ignorieren" oder zumindest so damit umgehen, dass der Beschreibungstext nicht sofort nach dem Erscheinen von [verdecktem] Text eine Zelle darüber angezeigt wird?

Vielen Dank an alle!

Antworten:

4 für die Antwort № 1

Sie können Ihre Funktion mit dem abschließen concatenate()-Funktion, um sicherzustellen, dass alles in einer Zelle angezeigt wird:

=concatenate(ImportXML(A1,"//div[@class="productCard"]"))