Web scraping.

Użytkowanie arkusza kalkulacyjnego
KontoLibreOffice
Posty: 92
Rejestracja: wt paź 04, 2022 5:48 pm

Web scraping.

Post autor: KontoLibreOffice »

Mam arkusz z kodami krótkimi towarów ale nie posiadam ich numerów EAN.
Myślałem by do ich zdobycia wykorzystać wyszukiwarkę google oraz metody web scraping.
Zastanawiam się czy można wykonać analogiczną operację jaką wykonał blogger z tego forum https://www.benlcollins.com/spreadsheet ... b-scraper/
prawdopodobnie będzie jeszcze potrzebne wykorzystanie wyrażeń regularnych.

Załączam plik, nazwy towarów częściowo usunięte by zmniejszyć rozmiar pliku, zostawiam nazwy dla samych cyfr gdyż to one mogą zwracać błędne wyszukiwania w przeciwieństwie do kodów z prefiksami [ YT- oraz YG- oraz GV- ].
Dla samych cyfr proponuję wyszukiwać hasło typu
'’EAN VOREL KOD’’ np. ‘’EAN VOREL 00250’’
Załączniki
Index-nazwa2 .ods
(115.87 KiB) Pobrany 60 razy
7.5.6.2 (X86_64)
Awatar użytkownika
Jermor
Posty: 2325
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: Web scraping.

Post autor: Jermor »

Nie bardzo wiem, jak chcesz wykorzystać wyszukiwarkę Google do uzyskania kodów EAN. Kody te, a właściwie pulę numerów przydziela GS1 Polska (https://gs1pl.org) a właścicielami są podmioty produkcyjne i to u nich należy uzyskać konkretne kody. Trzeba pamiętać, że kod EAN jest przypisany do konkretnego wyrobu producenta, a nie do symbolu towaru. Chleb Graham może wypiekać wiele piekarni i każda będzie miała dla niego swój kod.
Teraz co do Bena Collinsa. Jego metoda "wyciągania" danych ze struktury kodu HTML jest dobra (a funkcja zaimplementowana w GoogleDocs działa świetnie), ale nie zadziała w LibreOffice. Odpowiednikiem Googlowej funkcji IMPORTXLM() w LibreOffice jest FILTR.XML() [FILTERXML]. Niestety funkcja działa wyłącznie na czystym kodzie XML, no i wymaga (także w przypadku IMPORTXML()) choćby niewielkiej znajomości języka XPATH.
Inną funkcją, którą możesz wykorzystać w LibreOffice jest USŁ.INTER() [WEBSERVICE()]. Przy pomocy tej funkcji możesz pobrać wybraną stronę internetową i znając jej strukturę przy pomocy funkcji REGEX() wyodrębnić z niej potrzebne ci informacje. Jeśli twoje kody należą do produktów różnych producentów, musisz przeanalizować struktur stron internetowych, na których umieścili swoje dane. Bo kody znajdziesz zapewne w ich sklepach.
Funkcja USŁ.INTER() ładuje całą stronę do jednej komórki co uniemożliwia zbadanie jej struktury. Dlatego musisz to zrobić albo przez podejrzenie kodu źródłowego, co można zrobić w każdej przeglądarce, albo w konsoli przeglądarki, co jest czytelniejsze.
AOO 4.1.15, LO 24.2.5 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
KontoLibreOffice
Posty: 92
Rejestracja: wt paź 04, 2022 5:48 pm

Re: Web scraping.

Post autor: KontoLibreOffice »

Jermor pisze: sob lip 01, 2023 10:05 pm Nie bardzo wiem, jak chcesz wykorzystać wyszukiwarkę Google do uzyskania kodów EAN. Kody te, a właściwie pulę numerów przydziela GS1 Polska (https://gs1pl.org) a właścicielami są podmioty produkcyjne i to u nich należy uzyskać konkretne kody. Trzeba pamiętać, że kod EAN jest przypisany do konkretnego wyrobu producenta, a nie do symbolu towaru. Chleb Graham może wypiekać wiele piekarni i każda będzie miała dla niego swój kod.
Teraz co do Bena Collinsa. Jego metoda "wyciągania" danych ze struktury kodu HTML jest dobra (a funkcja zaimplementowana w GoogleDocs działa świetnie), ale nie zadziała w LibreOffice. Odpowiednikiem Googlowej funkcji IMPORTXLM() w LibreOffice jest FILTR.XML() [FILTERXML]. Niestety funkcja działa wyłącznie na czystym kodzie XML, no i wymaga (także w przypadku IMPORTXML()) choćby niewielkiej znajomości języka XPATH.
Inną funkcją, którą możesz wykorzystać w LibreOffice jest USŁ.INTER() [WEBSERVICE()]. Przy pomocy tej funkcji możesz pobrać wybraną stronę internetową i znając jej strukturę przy pomocy funkcji REGEX() wyodrębnić z niej potrzebne ci informacje. Jeśli twoje kody należą do produktów różnych producentów, musisz przeanalizować struktur stron internetowych, na których umieścili swoje dane. Bo kody znajdziesz zapewne w ich sklepach.
Funkcja USŁ.INTER() ładuje całą stronę do jednej komórki co uniemożliwia zbadanie jej struktury. Dlatego musisz to zrobić albo przez podejrzenie kodu źródłowego, co można zrobić w każdej przeglądarce, albo w konsoli przeglądarki, co jest czytelniejsze.

"właścicielami są podmioty produkcyjne i to u nich należy uzyskać konkretne kody. Trzeba pamiętać, że kod EAN jest przypisany do konkretnego wyrobu producenta, a nie do symbolu towaru. Chleb Graham może wypiekać wiele piekarni i każda będzie miała dla niego swój kod."

Wszystkie kody które chcę wyszukać pochodzą od Marek należących do Toya S.A , są to ich kody katalogowe.
Pisałem maila do Toya S.A czy nie użyczą mi kodów EAN jednak nie otrzymałem żadnej odpowiedzi.

"Nie bardzo wiem, jak chcesz wykorzystać wyszukiwarkę Google do uzyskania kodów EAN"

Jeśli wpiszę w wyszukiwarkę google "EAN YT-0512" to w tym konkretnym wypadku już w pierwszym linku znalazłem interesujący mnie kod 5906083905124, tak samo jeśli wpiszę "EAN VOREL 06410" to znowu w pierwszym linku znalazłem interesujący mnie kod 5906083064104.
Jest to jednak żmudna praca która aż prosi się o automatyzację.
Postanowiłem więc poszukać odpowiedzi w internecine, jak wykonać taką operację, co doprowadziło mnie do terminu web scraping a ten termin doprowadził mnie do ww. bloga.
Nie znam się jednak na zapytaniach xpath więc postanowiłem zapytać tutaj.

"Inną funkcją, którą możesz wykorzystać w LibreOffice jest USŁ.INTER() [WEBSERVICE()]"

Sprawdziłem czy ta funkcja daję poprawny rezultat i odpowiedź jest prawie.
Jako że domyślałem się że pobranie 11 tyś. stron internetowych za jednym razem skończy się
zawieszeniem systemu postanowiłem, najpierw poprzeciągać kursorem formuły w dół, robiąć coraz większe interwały. Działanie funkcji jest jednak trochę nie przewidywalne raz daję poprawny wynik a raz zwraca błąd #arg dla tych samych wartości.
Udało mi się uzyskać pobrane strony dla około 139 kodów.
Dokładna procedura wygląda tak.
1.Z listy kodów krótkich utwórz URL,
2.wykonaj ten proces po przez łączenie kodów z członem "https://www.google.com/search?q=ean+" ,
3. Potem zastosuj funkcje usł.inter() [ tutaj są problemy]
4.Zastosuj REGEX(komórka ;"\d{13}")
5.Sprawdzc poprawność kodu EAN za pomocą jego cyfry kontrolnej

Myślałem by zastosować arkusz google sheet gdyż prawdopodobnie mają większą moc obliczeniową, nie mają niestety oni funkcji usł.inter()[web.service()]
Czy da się zamiast niej wykorzystać którąś z ich funkcji importowania ?
7.5.6.2 (X86_64)
Awatar użytkownika
Jermor
Posty: 2325
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: Web scraping.

Post autor: Jermor »

Nadal słabo to widzę. I nie sądzę, aby łatwo dało się to zautomatyzować, zwłaszcza że kody mogą być poszukiwane w różnych źródłach o różnej budowie. A wyszukiwanie może zależeć np. od przeglądarki, systemu operacyjnego itd.
Napisałem taki mały arkusz, który wg twojego schematu poszukuje kodu. Załączam go i przyjrzyj się jak ten proces jest niejednoznaczny. To, że znalazłeś przykładowy kod YT-0512 za pierwszym podejściem o niczym jeszcze nie świadczy. W załączonym pliku zostawiłem wyszukanie kodu YT-2111 i oto jakie zobaczyłem rezultaty:
obraz_2023-07-04_150256466.png
obraz_2023-07-04_150256466.png (6.89 KiB) Przejrzano 660 razy
Pierwsza komórka (A1) zawiera poszukiwany symbol wyrobu, druga (B1) wytworzony na jego podstawie adres dla google.
Trzecia kolumna zawiera wszystkie znalezione w tej stronie 13-cyfrowe kody a czwarta wszystkie znalezione w tej stronie symbole zaczynające się od "YT-" z następującymi po tym cyframi.
REGEX() pozwala wybrać, który znaleziony element ma zostać zwrócony. Jako argumentu użyłem numer wiersza, Jeśli kolejnego elementu już nie ma wynikiem jest #N/D

Jeśli chodzi o GoogleDocs, to jest w nim funkcja IMPORTDATA("URL"). Ładuje ona wiersze strony internetowej do kolejnych komórek w tej kolumnie arkusza, w której została utworzona.
Załączniki
YT.ods
(13.13 KiB) Pobrany 59 razy
AOO 4.1.15, LO 24.2.5 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
KontoLibreOffice
Posty: 92
Rejestracja: wt paź 04, 2022 5:48 pm

Re: Web scraping.

Post autor: KontoLibreOffice »

Jermor pisze: wt lip 04, 2023 3:16 pm W załączonym pliku zostawiłem wyszukanie kodu YT-2111
Nie znalazłem kodu YT-2111 ani w moim arkuszu z kodami, ani w sklepie internetowym należącym do właściciela marki Yato, ani poprzez wyszukiwanie w google, co znaczy że towar o takim kodzie nie istnieje.
7.5.6.2 (X86_64)
KontoLibreOffice
Posty: 92
Rejestracja: wt paź 04, 2022 5:48 pm

Re: Web scraping.

Post autor: KontoLibreOffice »

@Jermor
Metoda na razie się sprawdza , mam już ponad 900 kodów , jednak co jakieś 150 kodów zaczynają wyskakiwać same błędy #arg. Po wyłączeniu arkusza i przerwaniu pracy na jakiś czas, a następnym ponownym wznowieniu, mogę znowu zrobić około 150 kodów.
Co może być tego przyczyną ?
7.5.6.2 (X86_64)
Awatar użytkownika
Jermor
Posty: 2325
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: Web scraping.

Post autor: Jermor »

Zauważyłem to także u siebie. Nie umiem tego wyjaśnić. Moje obserwacje prowadzą do tego, że występuje ten efekt tylko wtedy gdy USŁ.INTER() mają jako adres URL podany wynik wyszukiwania (search). Wnioskuję, że system nie wie, co podstawić do funkcji USŁ.INTER(). Przecież strona zwrócona przez Google to nie jest strona produktu tylko lista stron pasujących do wyszukiwanego kodu. Błąd #ARG! mówi, że brak jest wartości. Myślę, że chodzi o to, iż to funkcja USŁ.INTER() nie dostała żadnego adresu URL albo dostała coś, co nie jest adresem.
Ale aż tak nie jestem w tym biegły.
AOO 4.1.15, LO 24.2.5 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
KontoLibreOffice
Posty: 92
Rejestracja: wt paź 04, 2022 5:48 pm

Re: Web scraping.

Post autor: KontoLibreOffice »

@Jermor
Myślę, że google wyłącza dostęp, w celu ochronny swojej mocy obliczeniowej przed botami.
Zrobiłem mały test, klikając myszką i enterem na pasek URL, by wysyłać żądanie o tą samą stronę i już po krótkim czasie otrzymałem zapytanie czy nie jestem botem.

"Blokada wygaśnie wkrótce po ustaniu tych żądań"
To zdanie, najprawdopodobniej tłumaczy dlaczego po pewnym czasie mogę kontynuować, pobieranie kodów kreskowych.
Załączniki
Zrzut ekranu 2023-07-06 090833.png
Zrzut ekranu 2023-07-06 090833.png (67.35 KiB) Przejrzano 627 razy
7.5.6.2 (X86_64)
ODPOWIEDZ