Разбор таблицы по URL без (кодировки?) Странных символов - PullRequest
0 голосов
/ 05 ноября 2019

Я пытаюсь проанализировать таблицу со страницы URL, которую можно найти здесь .

Ниже приведен (прокомментированный) код, который я использую для анализа таблицы:

## Imports (some of them might not be used in this code snippet
import urllib.request, json 
import pandas as pd
import bleach
import html.parser
import time

# Read the whole url
with urllib.request.urlopen("https://www.mitomap.org/foswiki/bin/view/MITOMAP/MutationsCodingControl") as url:
    data = url.read().decode()

## Specify start and end of the string that contains the table data
start = '"data":[' 
end = '}]}' 

## slice the data into a string specified by start and end
final_string = '{' + data[data.index(start):data.index(end) + len(end)]

## remove the html tags and special characters
clean = html.unescape(bleach.clean(final_string, tags=[], strip=True))

## convert the clean str into a dictionary
json_dict = json.loads(clean)

## convert now json_dict into a df
df = pd.DataFrame(data=json_dict['data'], columns=[json_dict['columns'][i]['title'].strip() for 
i in list(range(len(json_dict['columns'])))])

Приведенный выше код работает частично: я получаю pandas df с нужной мне структурой, хотя у меня возникают проблемы с именами столбцов. Если я делаю: json_dict['columns'], я получаю:

[{'title': ' Position ', 'type': 'num-html'},
 {'title': ' Locus ', 'type': 'string', 'class': 'select-filter'},
 {'title': ' Disease ', 'type': 'string'},
 {'title': ' Allele  ', 'type': 'string'},
 {'title': ' NucleotideChange ', 'type': 'string'},
 {'title': ' Amino\xa0AcidChange ', 'type': 'string'},
 {'title': ' Homoplasmy ', 'type': 'string'},
 {'title': ' Heteroplasmy ', 'type': 'string'},
 {'title': ' Status ', 'type': 'string'},
 {'title': ' GB\xa0Freq\xa0\xa0FL\xa0(CR)*‡ ', 'type': 'string'},
 {'title': ' GB\xa0Seqs\xa0FL\xa0(CR)* ', 'type': 'string'},
 {'title': ' References ', 'type': 'num-html'}]

И если я делаю df.columns, я получаю:

Index(['Position', 'Locus', 'Disease', 'Allele', 'NucleotideChange',
       'Amino AcidChange', 'Homoplasmy', 'Heteroplasmy', 'Status',
       'GB Freq  FL (CR)*‡', 'GB Seqs FL (CR)*', 'References'],
      dtype='object')

Что означает, что «странные» символы все еще там (например,GB Freq FL (CR)*‡)

И, наконец, если я сделаю df['Amino AcidChange'] (учитывая, что Amino AcidChange является элементом в df.columns), я получу KeyError: 'Amino AcidChange'.

, я мог бы потенциально заменить«странные» символы в json_dict с regex, хотя мне интересно:

  1. Откуда эти «странные» символы? Имеет ли это какое-либо отношение к кодированию?
  2. Как я могу проанализировать информацию из data (возможно, изменив параметры, переданные в url.read().decode()) без этих "странных" символов?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...