[英]Selenium - Crawling a Spanish Website - 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'}}
它返回一个难以管理的字典。 我无法穿越像西班牙这样的使用特殊西班牙字符的联赛。
看来您的问题与编码有关。 我建议您:
声明明确地在你的代码中使用了编码评论编码
将Unicode [u'string']字符串转换为字符串,就像在此问题中所做的那样:
es_string = "mañana" es_string.encode("ascii") es_string.encode("latin-1") es_string.encode("utf-8")
u'B\\xe9lgica'
只是Unicode字符串的安全表示形式。 \\xe9
== Unicode U+00E9
== é
( http://www.fileformat.info/info/unicode/char/e9/index.htm )。
如果要将Unicode对象打印到兼容的控制台,则会看到正确的字符。
您还可以使用带有io
模块的编码TextWrapper将Unicode对象保存到文件中。 这使您可以将其另存为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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.