2017-12-10 17 views
1

以下のコードでは、nba.comからの演奏データを正常にスクラップし、そのデータをExcelファイルに書き込みます。一握りのゲームには効果的ですが、シーズン分のデータを一掃すると非常に遅くなります。Pythonでより効率的なWebスクレイピング?

データをより効率的に削り取るための実装がありますか?全シーズンで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