2015-12-24 2 views
2

У меня возникли проблемы с наложением веб-сайта, в котором используются испанские символы. Я написал следующий код для генерации кодов веб-сайт использует для своих лиг:Selenium - Сканирование испанского веб-сайта - UTF-8

LEAGUES = ['Internacional', 'Inglaterra', 'España', 'Francia', 'Alemania', 'Italia', 'Holanda', 'Portugal', 'Australia', 
      'Bélgica', 'Egipto', 'Grecia', 'Omán', 'Irán', 'Japón', 'Kuwait', 'Marruecos', 'Arabia Saudí', 'Escocia', 'Turquía', 
      'Irlanda del Norte', 'Dinamarca', 'Rusia', 'Emiratos Árabes', 'Gales', 'Túnez', 'Noruega', 'Suecia', 'Argelia', 'Israel'] 

def codes_generator(): 
    """ 
    generates dictionary containing codes for every division available 
    """ 
    codes = defaultdict(dict) 
    driver = selenium.webdriver.Chrome(executable_path='/media/Data.II/Dropbox/Projects/football-bidder/utils/chromedriver') 
    driver.get('https://www.miljugadas.com/es-ES/sportsbook') 
    driver.find_element_by_class_name('sport_240').click() 
    for league in LEAGUES: 
     try: 
      league = driver.find_element_by_link_text(league) 
      league.click() 
     except selenium.common.exceptions.NoSuchElementException as e: 
      continue 
     divisions = league.find_element_by_xpath("parent::*").find_elements_by_tag_name('li') 
     for division in divisions: 
      division = division.find_element_by_tag_name('a') 
      division_code = division.get_attribute('data-id') 
      division_name = division.text 
      codes[league.text][division_name] = division_code 
    return codes 


{u'B\xe9lgica': {u'B\xe9lgica - Jupiler League': u'52995'}, u'Espa\xf1a': {u'Espa\xf1a - Liga BBVA': u'23170', u'Espa\xf1a - Copa del Rey': u'67954'}, u'Kuwait': {u'Kuwait \u2013 Liga': u'128783'}, u'Holanda': {u'Holanda - Eredivisie': u'47282'}, u'Irlanda del Norte': {u'Irlanda del Norte - Premier': u'57274'} u'Grecia': {u'Grecia - Super Liga': u'53509'}} 

Он возвращает словарь, который является болью, чтобы управлять. Я не могу пересекать лиги, как Испания, которая использует специальные испанские символы.

+0

Python 2 или 3? Это важно – Dan

+1

Итак, в чем вопрос? –

+0

Python 2. Как хранить все со специальными символами. Я хочу, чтобы словарные ключи были Bélgica и España, а не B \ xe9lgica и Espa \ xf1a – FranGoitia

ответ

0

Кажется, что ваша проблема связана с кодировкой. Я хотел бы предложить вам:

  • объявить в явной форме кодировку в коде с комментарием кодирования

  • преобразования Unicode [U «строка»] строки в строку, как это было сделано in this question:

    es_string = "mañana" 
    es_string.encode("ascii") 
    es_string.encode("latin-1") 
    es_string.encode("utf-8") 
    
+0

Рекомендуется только преобразовать Unicodes в str() на выходе. Я не понимаю, почему вы пытаетесь кодировать Unicode с помощью множества разных кодеков. 'es_string.encode (" ascii ")' не удастся точно! –

+0

Я просто перечислял пример, чтобы позволить ему выбрать кодировку, которую он предпочитает .. это не должно было ввести в заблуждение! – mabe02

0

u'B\xe9lgica' только сейф representatio n строки Unicode. \xe9 == Юникод U+00E9 == é (http://www.fileformat.info/info/unicode/char/e9/index.htm).

Если вы хотите напечатать объекты Unicode на совместимой консоли, вы увидите правильные символы.

Вы также можете сохранить объекты Unicode в файл, используя кодировку TextWrapper с модулем io. Это позволяет сохранить его как UTF-8.

Вот пример выполнения обоих:

with io.open("myoutfile.txt", "w", encoding="UTF-8") as my_file: 
    for (league, division) in codes_generator().items(): 
     print league 
     my_file.write(league) 
Смежные вопросы