2013-06-10 2 views
-1

저는 최근에 파이썬으로 뛰어 들었고 비슷한 스크립트의 도움을 받아 내 지역의 통근 열차 정보를 파헤 치고 싶었습니다.정렬 된 문자열을 순서대로 나열했습니다

내가 얻는 정보는 이미 주문한 태그가 붙은 표시의 큰 덩어리이지만 내 검색에도 불구하고 (그리고 가난한 프로그래밍 수준 때문에) 나는 그것을 소화 할 길을 찾을 수없는 것처럼 보입니다.

나는 here의 예를 찾을 수 있습니다.

그리고 무엇을 내 "코드"현재 다음과 같습니다

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

이상은 등 각각의 스테이션, 유형,

와 조합하기 쉽게 각 열차의 정보를 사용해, 수 작업 할 것

제출을 개선하기 위해 할 수있는 일이 있다면 기꺼이 도와 드리겠습니다.

+2

체크 아웃 BeautifulSoup로. HTML을 통해 파싱 및 선별을 훨씬 더 즐겁게 만듭니다. –

+4

응답이 html이 아닌 json 인 것으로 나타납니다. –

답변

2

이미 언급했듯이 응답은 JSON에 있습니다. 내가 것, 당신이에 연결하는 페이지가 JSON이 아닌 HTML을 포함하기 때문에

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() 
+0

정말 고맙습니다. 나는 다음 번에 내 검색으로 철저히하려고 노력할 것이다. – kr0osti

2

: 파이썬은 JSON을 구문 분석 라이브러리와 함께 제공됩니다, 그래서 당신은 dicts, 목록 및 문자열의 좋은 구조를 얻기 위해 그것을 사용할 필요가 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는 파이썬 사전에 페이지의 모든 정보가 들어 있습니다.

+0

안녕하세요, 고맙지 만 솔루션 작업을 수행 할 수 없습니다 ... 항상이 오류 메시지가 표시됩니다. _AttributeError : addinfourl 인스턴스에 '__exit __'_ 속성이 없습니다. – kr0osti

+0

@ kr0osti 작동해야하지만 Python 3에서만 작동합니다 . – lqc

+0

@lqc 알았어, 그걸 시도해 볼게. 감사. – kr0osti

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 
관련 문제