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):
- 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.
- 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 Excelu | Arkusze Google | pandas | Rozszerzenie | |
|---|---|---|---|---|
| Strony za ekranem logowania | Tak (poprzez kopiowanie) | Tak (poprzez kopiowanie) | Nie | Tak |
| Polskie znaki zachowują się poprawnie | Tylko przy CSV UTF-8 | Tak | Tak | Tak |
| Możliwość wyboru separatora | Nie (ustalane przez Windows) | Nie (zawsze przecinki) | Tak (jako parametr) | Tak (w opcjach) |
| Setki stron za jednym razem | Nie | Nie | Tak | Nie |
| Czas potrzebny na jedną nową stronę | Około minuty | Około minuty | Minuty przy pierwszym uruchomieniu | Kilka 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ść.