Я пытаюсь прочитать таблицу по URL-адресу с помощью pandas, но она возвращает какое-то странное значение для столбца символов:
# 3rd party apps use "pip install pandas lxml"
import pandas as pd
url = "https://docs.google.com/document/d/e/2PACX-1vRMx5YQlZNa3ra8dYYxmv-QIQ3YJe8tbI3kqcuC7lQiZm-CSEznKfN_HYNSpoXcZIV3Y_O3YoUB1ecq/pub"
c = pd.read_html(url)
print(c)
Выход:
[ 0 1 2
0 x-coordinate Character y-coordinate
1 0 â 0
2 0 â 1
3 0 â 2
4 1 â 1
5 1 â 2
6 2 â 1
7 2 â 2
8 3 â 2]
Когда я печатаю определенные символы, я получаю это:
>>> c[0][1][1]
'â\x96\x88'
Сначала я предположил, что это шестнадцатеричный номер символа, но когда я проверил его, то обнаружил, что это не так. Я не совсем уверен в значении символа â.
Чтобы разобраться с кодировками: nedbatchelder.com/text/unipain.html и joelonsoftware.com/2003/10/08/…
Еще одна, хотя и очень техническая, ссылка, актуальная для Интернета, — это Спецификация HTML-кодирования . Особенно таблица, показывающая, какие метки кодировки используют какую пару кодировщик/декодер.
read_html()
использует используемый механизм синтаксического анализа для определения кодировки. В этом случае извлекаемый HTML-код содержит несколько ошибок интернационализации, в том числе не идентифицирует кодировку внутри документа. Парсер неправильно определяет кодировку, что может быть следствием других ошибок в HTML-документе. Параметр кодировки в read_html()
позволяет вам его переопределить.
вы можете указать параметр кодировки в read_html()
для обработки специального символа.
Вы можете попробовать:
url = "https://docs.google.com/document/d/e/2PACX-1vRMx5YQlZNa3ra8dYYxmv-QIQ3YJe8tbI3kqcuC7lQiZm-CSEznKfN_HYNSpoXcZIV3Y_O3YoUB1ecq/pub"
c = pd.read_html(url, encoding='latin1')
Или
url = "https://docs.google.com/document/d/e/2PACX-1vRMx5YQlZNa3ra8dYYxmv-QIQ3YJe8tbI3kqcuC7lQiZm-CSEznKfN_HYNSpoXcZIV3Y_O3YoUB1ecq/pub"
c = pd.read_html(url, encoding='utf-8')
Было бы лучше использовать windows-1252
, а не latin1
или iso-8859-1
, поскольку метки кодировки в Python означают разные вещи, а не в спецификации кодировки HTML.
Это кодировка utf-8 для блочного символа с кодовой точкой U+2588. Это то же самое, что
'\xe2\x96\x88'
. См. здесь: utf8-chartable.de/… Попробуйте прочитать HTML с помощьюc = pd.read_html(url, encoding='utf-8')