2017-12-08 14 views
0

1) 끝점에서 JSON 파일을 스크랩하기 위해 Python을 사용하고 싶습니다. (예 : http://stats.nba.com/stats/boxscoreplayertrackv2/?GameID=0021700300). 파이썬에 대한 요청을 설치하고 같은 변수에 페이지를 다운로드 시도했다 : 나는 몇 가지 일반 웹 페이지에서이 작업을 시도REQUESTS가있는 끝점에서 JSON 스크랩

import requests 
r = requests.get('http://stats.nba.com/stats/boxscoreplayertrackv2/? 
GameID=0021700300') 

그것은 일을하지만,이 엔드 포인트에 대한, 그것은 작동하지 않습니다. 요청을 보내면 기본적으로 Python 셸이 작동을 멈추고 다시 시작해야합니다. 나는 이것이 매우 원시적 인 해결책을 가져야한다고 믿습니다.

제발, 어떻게 다운로드 할 수 있습니까?

2)이 후, 나는 html/JSON을 가져 와서 시작 부분과 일부 끝 부분에있는 코드를 제거하여 테이블로 전송할 수있는 json 조각으로 남겨두고 싶습니다. Excel 또는 db 테이블). 내 궁극적 인 목표는이 프로세스를 자동화하여 매일 스크립트에서 새로운 JSON을 다운로드하고 (URL의 매개 변수 수를 늘리는 것만으로) 필요에 맞게 수정 한 다음 기존 표로 이전하거나 점진적으로 향상시키는 것입니다.

이 단계를 수행하는 방법을 알려주십시오. 난 그냥 일부 데이터와 함께 놀고 싶어 그리고 이것은 그들을 얻을 수있는 가장 좋은 방법처럼 보인다. 저는 파이썬에 익숙하지 않습니다. 프로그래밍에 대한 기본 지식 만 가지고 있으므로 원시적 인 질문에 변명하십시오. 나는 조금이라도 조언 해 주시면 감사하겠습니다.

답변

1

두 개의 헤더를 추가해야하는 것처럼 보입니다. 일반적으로 다음과 같이 json에 액세스 할 수 있습니다.

import requests 
import json 

headers={'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:57.0) Gecko/20100101 Firefox/57.0', 'Accept': 'application/json; charset=utf-8'} 
r = requests.get('https://stats.nba.com/stats/boxscoreplayertrackv2/?GameID=0021700300', headers=headers) 

j =r.json() 

for row in j['resultSets']: 
    print (row['name']) 
    for rowSet in row['rowSet']: 
     print (rowSet) 

출력 :

PlayerStats 
['0021700300', 1610612764, 'WAS', 'Washington', 203490, 'Otto Porter Jr.', 'F', '', '32:05', 4.22, 2.25, 5, 11, 16, 48, 0, 0, 28, 0, 2, 4, 0.5, 6, 14, 0.428, 0.444, 0, 0, 0.0] 
['0021700300', 1610612764, 'WAS', 'Washington', 202693, 'Markieff Morris', 'F', '', '20:39', 3.81, 1.31, 3, 4, 7, 30, 0, 0, 19, 1, 1, 2, 0.5, 0, 4, 0.0, 0.167, 2, 4, 0.5] 
... 
['0021700300', 1610612750, 'MIN', 'Minnesota', 201952, 'Jeff Teague', '', 'DNP - Injury/Illness     ', '0:00', 0.0, 0.0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.0, 0, 0, 0.0, 0.0, 0, 0, 0.0] 
TeamStats 
['0021700300', 1610612764, 'Wizards', 'WAS', 'Washington', '240:00', 16.74, 29, 60, 89, 399, 4, 0, 287, 23, 14, 31, 0.452, 22, 52, 0.422, 0.434, 12, 21, 0.57] 
['0021700300', 1610612750, 'Timberwolves', 'MIN', 'Minnesota', '240:00', 16.58, 30, 53, 83, 407, 1, 1, 296, 27, 18, 37, 0.485, 17, 48, 0.353, 0.412, 12, 18, 0.667] 

또는 (Excel 용) CSV에 쓸 수 :

import requests 
import json 
import csv 

headers={'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:57.0) Gecko/20100101 Firefox/57.0', 'Accept': 'application/json; charset=utf-8'} 
r = requests.get('https://stats.nba.com/stats/boxscoreplayertrackv2/?GameID=0021700300', headers=headers) 

j =r.json() 

with open("test.csv", 'w') as out_file: 
    csv_w = csv.writer(out_file) 
    for row in j['resultSets']: 
     csv_w.writerow ([row['name']]) 
     for rowSet in row['rowSet']: 
      csv_w.writerow (rowSet)