2014-09-26 2 views
0

У меня есть этот код прямо здесь, анализирующие сомы информации из Интернета:Сделать словарь из питона разобранных данных

import lxml.html 
from lxml.etree import XPath 
import json 



url = "http://gbgfotboll.se/information/?scr=table&ftid=51168" 
date = '2014-09-27' 
# use this in real mode: currentDate = (time.strftime("%Y-%m-%d")) 
list = [] 
id = 0 
score = "" 
rows_xpath = XPath("//*[@id='content-primary']/table[3]/tbody/tr[td[1]/span/span//text()='%s']" % (date)) 
time_xpath = XPath("td[1]/span/span//text()[2]") 
team_xpath = XPath("td[2]/a/text()") 

html = lxml.html.parse(url) 

for row in rows_xpath(html): 
    time = time_xpath(row)[0].strip() 
    team = team_xpath(row)[0] 
    list.append("%d:"%id + time + " " + team + " " + score) 
    id += 1 

print json.dumps(list) 

, который печатает:

0:13:00 Romelanda UF - IK Virgo (empty score for now) 
1:15:00 Kode IF - IK Kongah\xe4lla (empty score) 
etc.. 

Моего первый суб вопрос заключается в том, что некоторые из анализируемые данные будут содержать буквы «å» «ä» «ö», как бы я исправил, чтобы он печатал правильные буквы, как вы видите в результате (вторая строка), он печатает «Kongah \ xe4lla», который должен быть «Konghälla»,

Главный вопрос, как бы я превратить этот список в словарь, чтобы конечный результат JSON будет, как:

{"id":"0", "time":"13:00", "teams":"Romelanda UF - IK Virgo", "score":"empty" } 
etc... 

Спасибо !!!

ответ

0

Для вашего первого вопроса, \ xe4 не является символом ascii, если вы хотите распечатать его, возможно, вы можете попробовать его декодировать с помощью некоторой кодировки, которая кажется «windows-1252».

, когда я попробовать это, он работал для меня:

a='\xe4' 
b=a.decode('windows-1252') 
print b 

Для вашего второго вопроса, то просто изменить код для этого:

for i,row in enumerate(rows_xpath(html)): 
    # 
    # 
    list.append({"id":str(i), "time":time, "teams":team, "score":score}) 

, и я думаю, что вы действительно не хотите назовите свой список «список», это своего рода ключевое слово python ~ удачи.

, кстати, то перечисление создает индекс автоматически, вы можете использовать свой «идентификатор» вместо этого, просто с этим:

list.append({"id":str(id), "time":time, "teams":team, "score":score}) 
+0

Большое спасибо! Это мне очень помогло. Но в отношении вашего первого ответа. Как вы можете видеть, что он разбирает информацию из Интернета, поэтому я не знаю, какая из трех букв будет возникать когда и где. Каждый день будет анализироваться новая информация, так как я могу сделать что-то, что будет проверять каждый раз, когда он анализирует и исправляет его? @lisnb также, пожалуйста, обратите внимание, что вы не можете использовать .append, когда дело доходит до словарей. – 2014-09-26 12:53:53