2017-12-10 12 views
1

다음 코드는 nba.com의 play-by-play 데이터를 성공적으로 스크랩 한 다음 엑셀 파일에 데이터를 씁니다. 소수의 게임에서는 훌륭하게 작동하지만, 전체 시즌의 데이터를 다룰 때 엄청나게 느려집니다.파이썬에서보다 효율적인 웹 스크래핑?

데이터를 더 효과적으로 스크래핑 할 수있는 구현이 있습니까? 전체적인 시즌 동안 500K + 행의 데이터를 처리 할 수 ​​있으므로 번개 속도는 기대할 수 없지만 내 코드를 향상시킬 수있는 방법이 있다면 분명히 방법을 배우고 싶습니다.

미리 도움을 청하십시오!

ids = [str(i) for i in range(21500001,215)] 

import requests 
import pandas as pd 

dfs = [] 

for id in ids: 

    game_url = 'http://stats.nba.com/stats/playbyplayv2?EndPeriod=10&EndRange=55800&GameID=00' + id + '&RangeType=2&Season=2015-16&SeasonType=Regular+Season&StartPeriod=1&StartRange=0' 

    u_a = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.82 Safari/537.36" 
    response = requests.get(game_url, headers={"USER-AGENT":u_a}) 
    response.raise_for_status() 
    game = response.json()['resultSets'][0]['rowSet'] 
    final = pd.DataFrame(game) 
    dfs.append(final) 

    finalgame = pd.concat(dfs) 

dfs2 = pd.DataFrame(finalgame) 

dfs2.to_excel("game15-16.xlsx") 

답변

1

병목이 어디에 있는지 확인하고 볼 수 있어야합니다. 일반적으로 스크레이퍼에서 병목 목은 네트워킹입니다. 평행하게하면 더 빨리 만들 수 있습니다. 예를 들어 동시 요청을 수행하기 위해 Twisted 프레임 워크를 기반으로하는 scrapy을 사용하십시오.

+0

cvs 파일로 내보내는 방법은 무엇입니까? 지금까지 CSV를 읽는 것이 더 빠르면 CSV로 쓰기도 더 빠릅니까? – Marine1