我最近跳进了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
理想的情况是能够轻松地处理每列火车的信息,将它们与各自的车站,类型等结合起来。
非常感谢,如果我能做些什么来改进我的提交,我会很乐意这样做。
答案 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