Ordelio

Zapisz tabelę ze strony internetowej jako plik CSV

Plik CSV to zwykły tekst, który potrafi odczytać każdy arkusz kalkulacyjny i baza danych. Przeniesienie do niego tabeli ze strony jest proste; trudniejszą częścią jest zrobienie tego tak, aby polskie znaki nie zamieniły się w krzaki, separator był właściwy, a zera na początku nie zniknęły. Oto cztery sposoby i ograniczenia każdego z nich.

1. Kopiuj, wklej do Excela, a następnie użyj polecenia Zapisz jako

Zaznacz tabelę, skopiuj ją, wklej do pustego arkusza Excela, a następnie skorzystaj z polecenia Zapisz jako w menu Plik i wybierz typ pliku CSV UTF-8.

Dobre do: małej tabeli, której potrzebujesz raz, gdy masz już otwartego Excela.

Gdzie pojawiają się problemy: wybór zwykłego typu CSV zamiast CSV UTF-8 sprawi, że każdy znak spoza domyślnego kodowania systemu Windows (znaki akcentowane, cyrylica, chiński) zamieni się w znaki zapytania. Excel zapisuje również separator skonfigurowany w ustawieniach regionalnych Twojego systemu, więc w wielu polskich systemach plik „rozdzielony przecinkami” w rzeczywistości używa średników, podczas gdy program odczytujący może oczekiwać przecinków. Wklejanie może też gubić wiodące zera (kod taki jak 01234 zmieni się w 1234), zamieniać wartości typu 1-2 na daty, a zaznaczenie może objąć tekst znajdujący się wokół tabeli.

2. Arkusze Google: wklej, a następnie pobierz

Wklej tabelę do pliku w programie Arkusze Google, otwórz menu Plik, wybierz opcję Pobierz, a następnie format wartości rozdzielonych przecinkami (.csv).

Dobre do: każdego komputera z przeglądarką, bez potrzeby posiadania Excela, a plik zawsze ma kodowanie UTF-8.

Gdzie pojawiają się problemy: plik zawsze używa przecinków, przez co Excel w regionie z przecinkiem dziesiętnym może nie rozbić danych na kolumny po dwukrotnym kliknięciu pliku. Pobierany jest tylko arkusz, na który patrzysz, a nie cały plik. Podobnie jak Excel, Arkusze mogą podczas wklejania przekształcić niektóre wartości w daty lub liczby.

3. Python: pandas.read_html

Jeśli pracujesz w języku Python, biblioteka pandas potrafi odczytać każdą tabelę na stronie i zapisać ją jako CSV:

pandas.read_html("https://example.com/page")[0].to_csv("table.csv", index=False)

Liczba w nawiasie to pozycja tabeli na stronie (0 oznacza pierwszą). Wymaga zainstalowanych bibliotek pandas oraz lxml.

Dobre do: tej samej strony co tydzień lub setek stron w skrypcie automatycznym.

Gdzie pojawiają się problemy: niektóre strony odrzucają żądanie błędem 403, ponieważ nie wygląda ono jak ruch z przeglądarki, więc musisz najpierw pobrać stronę we własnym zakresie i przekazać HTML do pandas. Narzędzie to nie widzi stron wymagających logowania ani tabel generowanych przez JavaScript po załadowaniu strony. Oznaczniki przypisów typu [1] pozostają w nagłówkach i wartościach, a liczby całkowite mogą zmienić się w format 8021407192.0, gdy w kolumnie pojawi się brakująca komórka.

4. Rozszerzenie do przeglądarki: jedno kliknięcie na stronie, którą czytasz

Rozszerzenie działa na stronie dokładnie tak, jak widzisz ją w przeglądarce, więc poradzi sobie również po zalogowaniu oraz na tabelach zbudowanych w języku JavaScript. Tworzymy własne narzędzie, Ordelio Kopiuj Tabele (darmowe, bez limitów wierszy):

  1. Otwórz stronę i kliknij ikonę rozszerzenia (lub naciśnij Alt+Shift+Y). Wyświetli ono listę wszystkich tabel na stronie, zaczynając od największej; najedź na którąś kursorem, a zostanie ona podświetlona.
  2. Naciśnij CSV: przeglądarka zapisze plik z tą tabelą. Polskie znaki przetrwają, ponieważ plik zapisywany jest w formacie UTF-8 ze znacznikiem informującym o tym Excela, a separatorem jest średnik, jeśli w Twoim języku używa się przecinka dziesiętnego (w opcjach możesz wymusić przecinek, średnik lub tabulator).

Narzędzie usuwa również oznaczenia przypisów typu [1], powiela scalone komórki, aby kolumny pozostały wyrównane, oraz zapisuje kody takie jak 01234 dokładnie w takiej formie, w jakiej znajdują się na stronie (arkusz kalkulacyjny otwierający plik może je jednak z powrotem zamienić na liczby).

Gdzie pojawiają się problemy: zapisuje to, co znajduje się na stronie w danym momencie, więc tabela podzielona na kilka stron wymaga pobrania po jednym pliku z każdej z nich, a rozszerzenie nie potrafi samodzielnie aktualizować pliku tak jak skrypt.

Pobierz Ordelio Kopiuj Tabele dla Microsoft Edge Wersje dla przeglądarek Chrome i Firefox: w trakcie weryfikacji.

Które rozwiązanie wybrać

Zapisz jako w ExceluArkusze GooglepandasRozszerzenie
Strony za ekranem logowaniaTak (poprzez kopiowanie)Tak (poprzez kopiowanie)NieTak
Polskie znaki zachowują się poprawnieTylko przy CSV UTF-8TakTakTak
Możliwość wyboru separatoraNie (ustalane przez Windows)Nie (zawsze przecinki)Tak (jako parametr)Tak (w opcjach)
Setki stron za jednym razemNieNieTakNie
Czas potrzebny na jedną nową stronęOkoło minutyOkoło minutyMinuty przy pierwszym uruchomieniuKilka sekund

W skrócie: jeśli potrzebujesz skryptu uruchamianego co tydzień na ogólnodostępnych stronach, użyj biblioteki pandas. Jeśli chcesz jednorazowo zapisać dane ze strony, którą czytasz – zwłaszcza jeśli wymaga ona logowania – pobierz je bezpośrednio ze strony.

Znalazłeś tabelę, z którą żadna z tych metod sobie nie radzi? Daj nam znać, czytamy każdą wiadomość.