2016-11-25 9 views
0

これはこの質問の場所ではないが、残念ながら私はどこから質問するのか分からない。PythonでWebデータを掻き立てる

私はrotogrinders.comからデータを削り取ろうとしています。私はいくつかの課題に取り組んでいます。

特に

、私は(明らかにあなたが他の日のデータの日付を変更することができます)この形式のURLを使用して、前のNHLのゲームデータをこすりすることができるようにしたい: https://rotogrinders.com/game-stats/nhl-skater?site=draftkings&date=11-22-2016

しかし、私はページを取得データがページに分割されていることがわかりました。ページの下部にある[すべて]ボタンをクリックした後に表示されるデータを取得するスクリプトを作成するにはどうすればよいか分かりません。

これをPythonで行う方法はありますか?おそらく、ボタンのクリックを許可するライブラリですか?または、URL /リクエストを賢明にして実際にボタンをクリックせずにデータを取得する方法はありますか?

+0

セレン。 –

+0

これまでに何をしていますか?コードを表示したり、タスクを実行しようとすると、人々はもっと助けてくれるでしょう。 – Dalvenjia

答えて

1

実際には、事態はこの場合複雑ではありません。 「すべて」をクリックすると、ネットワークリクエストは発行されませんのデータはすべて既にそこにあります - HTML内のscriptタグ内には、それを抽出するだけです。

作業requestsを使用してコード(ページのコンテンツをダウンロードする)、BeautifulSoup(HTMLを解析し、所望のscript要素を配置するために)、re(スクリプトから所望の「プレーヤー」配列を抽出する)とjson(アレイをロードしますPythonのリストに文字列):

import json 
import re 

import requests 
from bs4 import BeautifulSoup 

url = "https://rotogrinders.com/game-stats/nhl-skater?site=draftkings&date=11-22-2016" 
response = requests.get(url) 

soup = BeautifulSoup(response.content, "html.parser") 
pattern = re.compile(r"var data = (\[.*?\]);$", re.MULTILINE | re.DOTALL) 

script = soup.find("script", text=pattern) 

data = pattern.search(script.text).group(1) 
data = json.loads(data) 

# printing player names for demonstration purposes 
for player in data: 
    print(player["player"]) 

版画: "?ボタンをクリックできるようになりますおそらくいくつかのライブラリー"

Jeff Skinner 
Jordan Staal 
... 
William Carrier 
A.J. Greer 
+0

ありがとう! BeautifulSoupについて聞いたことがありましたが、これまで私が使っていたときはあまり運がありませんでした。明らかに私はそれができることを本当に理解するために、より多くのドキュメントを読む必要があります。 もう一度お手伝いをしていただきありがとうございます – TrolliOlli

関連する問題