Problem
Podczas przesiewania ekranu strony przy użyciu Pythona należy znać kodowanie znaków strony. Jeśli kodowanie znaków będzie nieprawidłowe, wyniki będą pomieszane.Jak pobrać dowolną (!) Stronę z poprawnym zestawem znaków w pythonie?
Ludzie zazwyczaj używają podstawowej techniki do wykrywania kodowania. Używają zestawu znaków z nagłówka lub zestawu znaków zdefiniowanego w metatagu lub używają nazwy encoding detector (która nie dba o metatagi lub nagłówki). Używając tylko jednej z tych technik, czasami nie uzyskasz takiego samego wyniku, jak w przeglądarce.
Przeglądarki zrobić to w ten sposób:
- Metatagi zawsze ma pierwszeństwo (lub definicji XML)
- Kodowanie zdefiniowanego w nagłówku jest używany, gdy nie ma zdefiniowane w znaczniku meta charset
- Jeśli kodowanie w ogóle nie jest zdefiniowane, niż czas na wykrycie kodowania.
(No ... przynajmniej, że jest sposób, wierzę większość przeglądarek to zrobić. Dokumentacja jest naprawdę rzadkością.)
Co szukam to biblioteka, która może zadecydować zestaw znaków strony w taki sam sposób jak przeglądarka. Jestem pewien, że nie jestem pierwszym, który potrzebuje odpowiedniego rozwiązania tego problemu.
Rozwiązanie (nie próbowałem go jeszcze ...)
Według Beautiful Soup's documentation.
Piękne Soup próbuje następujące kodowanie, w kolejności, aby obrócić dokument w formacie Unicode:
- Kodowanie przekazać w jak fromEncoding argument do zupy konstruktora.
- Kodowanie odkryte w samym dokumencie: na przykład w deklaracji XML lub (dla dokumentów HTML) znacznik META równoważny http. Jeśli Beautiful Soup znajdzie ten rodzaj kodowania w dokumencie, od nowa analizuje dokument i daje nowe próby kodowania. Jedynym wyjątkiem jest to, że wyraźnie określiłeś kodowanie i kodowanie faktycznie zadziałało: wtedy zignoruje kodowanie znalezione w dokumencie.
- Kodowanie powąchano, patrząc na pierwsze kilka bajtów pliku. Jeśli na tym etapie zostanie wykryte kodowanie , będzie to jedno z kodowań UTF- *, EBCDIC lub ASCII.
- Kodowanie wąchane przez bibliotekę chardet , jeśli jest zainstalowane.
- UTF-8
- systemu Windows-1252
Nie można pobrać z prawidłowym zestawem znaków. Przeglądarki odgadują błędnie przez cały czas, gdy poprawny zestaw znaków nie jest określony. Używam menu widoku-> kodowania w FF, aby codziennie naprawiać nieprawidłowe domysły. Chcesz robić tak dobrze, jak możesz, ale porzuć zgadywanie każdej strony poprawnie. –
Odgadywanie zestawów znaków jest złe i wpędza nas w ten bałagan. Jeśli przeglądarki nigdy nie próbowały zgadywać, programiści byliby zmuszeni dowiedzieć się o nagłówkach HTTP i zawsze dokładnie określać kodowanie. Zgadywanie oznacza, że kiedyś się pomylisz –
Gnibbler, zgadywanie to ostatnia deska ratunku –