2017-12-19 8 views
1

온라인 상태 인이 JSON 파일에 접근하여 데이터를 쿼리하고 검색 결과를 반환해야하는 코드를 작성하고 있습니다.웹 기반 JSON 읽기

adsb_data = urllib2.urlopen('http://website.com')  

urllib2.HTTPError가 발생합니다 : HTTP 오류 403 :

나는 다음 코드를 시도 그래서 분명히

을 금지 그것에 대해 가장 좋은 방법은 않을거야. JSON 페이지를 열고 긁어내어 결과를 표시하는 가장 좋은 방법은 무엇입니까? 이 일을하는 훨씬 더 우아하고 파이썬적인 방법이있는 것처럼 느껴집니다.

+1

이것은 다소 이상합니다. 나는 urllib로 오류를 재현 할 수있다. 하지만 잘 작동합니다 요청을 사용하여 http://docs.python-requests.org – masterfloda

+1

시도해 볼 때 작동 할 수도 있습니다. [urllib2.HTTPError : HTTP 오류 403 : 금지됨] (https://stackoverflow.com)/a/13303773/1248974) – davedwards

+0

HTTP 403은 오해의 소지가 있습니다. 다른 4xx 코드 여야합니다. 심지어 400은 더 적절할 것입니다 ... – masterfloda

답변

2

특정 서버가 파이썬의 사용자 에이전트를 차단하고있는 것처럼 보입니다. 이것은 당신을 위해 작동해야합니다 :

url = "http://public-api.adsbexchange.com/VirtualRadar/AircraftList.json" 
dummy_ua = "Mozilla/5.0 (X11; U; Linux i686) Gecko/20071127 Firefox/2.0.0.11" 
request = urllib2.Request(url, headers={'User-Agent' : dummy_ua}) 
urllib2.urlopen(request).read() 
+0

정말 재미있는 해결책입니다. 사용자 에이전트를 차단하고 있다고 생각조차하지 못했습니다. 내가 브라우저에 없었기 때문에 내 마음이 흐려 지지도 않았다. 고맙습니다! – OutlawBandit

0

좋은 답변들! 모두에게 감사드립니다.

urllib2 대신 requests을 사용하여 문제를 해결했습니다. 나는 목록을 만들고 내가 그것에서 원하는 데이터를 분석 거기에서

adsb_data = http_request('http://public-api.adsbexchange.com/VirtualRadar/AircraftList.json', 'GET') 

: 여기처럼 내 요청을 속입니다.