2017-12-15 10 views
0

Python 3.6.1を実行中| Windowsデバイス上でAnaconda 4.4.0(64ビット)を実行する。 1のURLをチェックした場合、彼らは動的にロードされている素敵なテーブルが表示されます動的に読み込まれたテーブルをPandas Dataframeに変換する

from selenium import webdriver 
from selenium.webdriver.common.keys import Keys 

url = "https://nextgenstats.nfl.com/stats/receiving#yards" 
driver = webdriver.Chrome(executable_path=r"C:/Program Files (x86)/Google/Chrome/chromedriver.exe") 
driver.get(url) 
htmlSource = driver.page_source 

セレンを使用して

は、私は、次のHTMLソースを収集します。私は、このテーブルをhtmlsourceからどのように抽出して、パンダのデータフレームを構築できるのか不明です。

+1

パンダを使用することができます( 'read_htmlを持っています) 'であり、ファイル内にすべて'

'があります。 – furas

+0

@furas 'read_html()'が 'BeautifulSoup'なしで、テーブルが見つからないというエラーを返しました。 _COLDSPEED_からの回答が機能します。 – sunspots

+1

答えは無かったけど、何を使うべきかだけを摂取した。 – furas

答えて

3

あなたはかなり近いです。あなたはちょっとパンダの手伝いが必要です。要するにここにあなたがしなければならないことがあります。

  1. 問題のテーブルを探すBeautifulSoup
  2. にソースをロードします。 soup.find
  3. コールpd.read_html
from bs4 import BeautifulSoup 

soup = BeautifulSoup(htmlSource, 'html.parser') 
table = soup.find('div', class_='ngs-data-table') 

df_list = pd.read_html(table.prettify()) 

さて、df_listは、そのページ上のすべてのテーブルのリストが含まれて使用してください - Scrapyユーザーとして

df_list[1].head() 

       0 1 2 3 4  5  6 7 8  9  10 11 
0 Antonio Brown PIT WR 4.3 2.6 13.7 45.32 99 160 61.88 1509 9 
1 DeAndre Hopkins HOU WR 4.6 2.1 13.1 42.19 88 155 56.77 1232 11 
2  Adam Thielen MIN WR 5.8 2.6 11.0 37.38 80 124 64.52 1161 4 
3  Julio Jones ATL WR 5.2 2.4 14.2 43.34 73 118 61.86 1161 3 
4  Keenan Allen LAC WR 5.4 2.6 9.5 31.30 83 129 64.34 1143 5 
+1

素晴らしいです、 'BeautifulSoup'は欠けていたリンクでした。 – sunspots

+0

@sunspotsこれを行う別の方法があるかもしれませんが、私が知る限り、これは最も簡単な方法です。彼らが言うように、データを調べ、テーブルを突き止め、残りは歴史です。 –

+0

1日か2日で、誰かが共有したいと思っていることを誰かが持っているかどうかを知るために、この質問に恩恵を与えるかもしれません。read_htmlの多数の引数を使います。 –

2

を、私は見ために使用していますXHRリクエスト。あなたのサイトで年を変更すると、https://appapi.ngs.nfl.com/statboard/receiving?season=2017&seasonType=REG

へのAPIコールが表示されます。このAPIはJSONを返すので、read_jsonのようなJSONパーサーをデータとして使用することは理にかなっています。

enter image description here

は、ここでは、これがScrapyシェルで使用することができます方法は次のとおりです。

$ scrapy shell 

In [1]: fetch("https://appapi.ngs.nfl.com/statboard/receiving?season=2017&seasonType=REG") 
2017-12-15 13:11:30 [scrapy.core.engine] INFO: Spider opened 
2017-12-15 13:11:31 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://appapi.ngs.nfl.com/statboard/receiving?season=2017&seasonType=REG> (referer: None) 

In [2]: import pandas as pd 

In [3]: data = pd.read_json(response.body) 

In [4]: data.keys() 
Out[4]: Index([u'season', u'seasonType', u'stats', u'threshold'], dtype='object') 

In [5]: pd.DataFrame(list(data['stats'])) 

あなたはscrapyを持っていない場合、あなたはrequests

import requests 
import pandas as pd 

url = "https://appapi.ngs.nfl.com/statboard/receiving?season=2017&seasonType=REG" 

response = requests.get(url) 
data = pd.read_json(response.text) 
df = pd.DataFrame(list(data['stats']))