混合字符串到有序列表

时间:2013-06-10 22:52:43

标签: python python-2.7

我最近跳进了python,并且在类似脚本的帮助下,想要“抓住”并解析我所在地区的通勤列车信息。

问题是,我获得的信息是已经订购和标记的大部分指示,但是尽管我的搜索(并且由于我的编程水平差),我似乎无法找到消化它的方法。 / p>

你可以找到我得到的here的一个例子。

我的“代码”目前是什么样的:

import urllib
sock = urllib.urlopen("http://sncf.mobi/infotrafic/iphoneapp/transilien/?gare=BEC")
htmlSource = sock.read()
sock.close()
o = htmlSource
print o

理想的情况是能够轻松地处理每列火车的信息,将它们与各自的车站,类型等结合起来。

非常感谢,如果我能做些什么来改进我的提交,我会很乐意这样做。

3 个答案:

答案 0 :(得分:2)

如前所述,响应采用JSON格式。 Python附带了一个用于解析JSON的库,所以你只需要使用它来获得一个很好的结构,包括词典,列表和字符串:

import urllib
import json

response = urllib.urlopen("http://sncf.mobi/infotrafic/iphoneapp/transilien/?gare=BEC")
if response.getcode() == 200:
    data = json.load(response)
    for train in data["D"]:
        print "Train number", train["numerotrain"], "code", train["codevoyageur"]
else:
    print "Failed to load data:", response.getcode()

答案 1 :(得分:2)

由于您链接的页面包含JSON而不是HTML,我建议使用json模块解析它。你可以这样做:

from urllib.request import urlopen
import json

with urlopen('http://sncf.mobi/infotrafic/iphoneapp/transilien/?gare=BEC') as sock:
    information = json.loads(sock.read().decode('utf-8'))

然后information包含Python字典中页面上的所有信息。

答案 2 :(得分:0)

如果包装器总是D或者您知道包装器是什么......

import json

class Trains:
    def __init__(self, data, wrapper='D'):
        self.data = data[wrapper]

    def get_train_by_number(self, num):
        for i in self.data:
            if int(i['numerotrain']) == num: return i
        return None

# your code to pull http://sncf.mobi/infotrafic/iphoneapp/transilien/?gare=BEC

data = json.loads(response)
trains = Trains(data)

# get train number 134741
train = trains.get_train_by_number(134741)

print train['heureprobable'] # prints 11/06/2013 00:54