/ / Trouble with Xpath in Google Spreadsheets (ImportXML) - xml, xpath, google-spreadsheet

Problemy z Xpath w Arkuszach kalkulacyjnych Google (ImportXML) - xml, xpath, google-spreadsheet

To świetna strona, a ja już dużo miałemodpowiedzi na pytania po prostu przewijając i przeszukując inne posty. Niestety, nie mogę znaleźć odpowiedzi, która szczególnie pomaga w tym problemie, i pomyślałem, że spróbuję opublikować i poszukać pomocy -

Używam ImportXML i arkuszy kalkulacyjnych Google do „pobrania” kilku opisów produktów ze sklepu detalicznego. W większości działało to dobrze i zrobiłem to na dwa sposoby:

1) Konkretne wezwanie do części opisowej posta:

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

2) Wywołanie całej „karty produktu”, która również zwraca informacje, takie jak tytuł produktu, cena, czas publikacji, i umieszcza te elementy w sąsiednich komórkach w moim arkuszu kalkulacyjnym Google:

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

Oba działały dobrze, ale natknąłem się na plikinny problem przy użyciu każdej metody. Jeśli uda mi się rozwiązać choćby jeden z tych problemów, z radością zrezygnuję z drugiej metody, potrzebuję tylko jednej z nich do pracy. Problemy są następujące:

Metoda 1) Witryna zabrania sprzedawcomw tym informacje kontaktowe w ogłoszeniach o produktach - jeśli i tak zawierają adres e-mail, witryna automatycznie go blokuje, więc w poście pojawia się po prostu jako „... możesz skontaktować się ze mną pod adresem [zasłonięte]” lub coś w tym rodzaju. [Zasłonięty] pojawia się w tekście o innym kolorze i oczywiście jest w jakiś sposób inaczej traktowany. Kiedy zeskrobuję te opisy za pomocą metody 1, ImportXML wydaje się „uderzać”, gdy trafia na słowo [zasłonięte], i przekazuje pozostały tekst z tego opisu produktu do następnej komórki w moim arkuszu kalkulacyjnym. To psuje całą organizację arkusza i chciałbym znaleźć sposób, w jaki mogę uzyskać ImportXML, aby po prostu zignorować [zasłonięte] i nadal umieszczać cały tekst opisu produktu w jednej komórce.

Metoda 2) Mój apel dotyczący całej „karty produktu” jest następujący:

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

Jak wspomniano, działa to dobrze (dla większości plikówprodukty) i nie przeszkadza mi, że dodatkowe informacje (cena, data itp.) są umieszczane w sąsiednich komórkach. Witryna umożliwia jednak także „promowanie” określonych produktów, gdy pojawiają się one w innym kolorze w witrynie, przez co są bardziej skłonne do przyciągnięcia uwagi kupującego. Korzystając z tej metody, „polecane” produkty nie są usuwane ani importowane do mojego arkusza kalkulacyjnego, ale są po prostu pomijane.

Kod źródłowy (w rzeczywistej witrynie) (poprzez „inspectelement "w Safari) zarówno dla opisu (metoda 1), jak i karty produktu (metoda 2) wyglądają następująco (dla normalnego produktu (a) i prezentowanego produktu (b)):

(za)

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

Możesz zobaczyć w obu (a) i (b) klasie „desc”że wywołuję metodę 1, która wydaje się działać dobrze. Z lektury tej witryny wynika, że ​​„dowiedziałem się, że dana klasa nie może mieć więcej niż jednego słowa, dlatego też używa się wyrażeń„ desc collapsed descFull ”i„ productCard tracked ”oraz„ productCard Featured tracked „don” t reprezentują klasy z 3, 2 i 3 słowami w tytule, ale zamiast tego przypadki, w których przypisano wiele klas?

Niezależnie od tego, wywołanie „desc” (metoda 1) działadobrze i wydaje się, że wszystkie opisy. Dlatego w metodzie 2 pomyślałbym, że wywołanie „karty produktu” spowoduje uzyskanie informacji o wszystkich produktach, zarówno polecanych, jak i zwykłych, ponieważ „wyróżniony” jest dodatkową klasą przypisaną do niektórych kart „produktów”. Jeśli nazywam wszystkie karty „productCard”, czy normalne ORAZ polecane karty nie powinny zostać zwrócone? Obecnie tak nie jest. Próbowałem wywoływać tylko „śledzone” i po prostu „polecane” jako klasy, ale żadna z nich nie zwraca niczego, więc moja logika, że ​​są one odpowiednikiem klasy „productCard”, może być błędna.

Podsumowując, wywołanie „desc” w metodzie 1 działadobrze, a nawet dostaje opisy „polecanych” produktów. Jednak gdy informacje kontaktowe są zawarte w opisie i są wyświetlane jako [zasłonięte], przenoszą moje dane do następnej komórki w arkuszu kalkulacyjnym, bezpośrednio po słowie. To odrzuca i rujnuje całą organizację.

W metodzie 2 w ogóle nie otrzymuję przedstawionych produktów, co znacznie osłabia to, co próbuję zrobić. Czy można rozwiązać jeden z (lub oba!) Z tych problemów?

Bardzo dziękuję za jakąkolwiek pomoc, którą możesz mi udzielić.

***AKTUALIZACJA:Jak widać w komentarzach poniżej, użycie opcji „zawiera” jako sugerowanej ulepszonej metody 2 poprzez pobranie zarówno zwykłych, jak i polecanych produktów. Jednak prezentowane karty produktów mają dodatkowe elementy tekstowe, a ponieważ cała karta jest zeskrobywana w ten sposób, wyróżnione produkty nie pasują do wyrównania komórek, które robią zwykłe produkty. Jeśli istnieje sposób na naprawienie metody 1, byłoby to znacznie lepsze. Jak podkreślono w poniższych komentarzach, [zasłonięty] tekst pojawia się w „rozpiętości”, która następuje pod spodem / jest wcięta od

<div class="desc descFull collapsed"

tak jak

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

Czy jest jakiś sposób, żebym mógł zaimportować pliki „desc” jakoByłem, ale powiedzieć XPath, aby zasadniczo „zignorował” [zasłonięty] zakres, lub przynajmniej poradził sobie z nim w sposób, który nie powoduje, że tekst opisu natychmiast po [zasłoniętym] pojawia się o jedną komórkę?

Dziękuję bardzo wszystkim!

Odpowiedzi:

4 dla odpowiedzi № 1

Możesz opakować swoją funkcję za pomocą concatenate()-funkcja, aby upewnić się, że wszystko pojawi się w jednej komórce:

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