2016-10-20 2 views
1

例のURLは、「http://www.hockey-reference.com/players/c/crosbsi01/gamelog/2016スクレイプ表へのデータのDATAFRAME

私はレギュラーシーズンという名前つかむしようとしているテーブル名。私は以前のインスタンスで行うために使用何

は、私はこの1つの似たようなサイトに取ったアプローチのタイプです。このような何か...

import requests 
from bs4 import * 
from bs4 import NavigableString 
import pandas as pd 


url = 'http://www.hockey-reference.com/players/o/ovechal01/gamelog/2016' 
resultsPage = requests.get(url) 
soup = BeautifulSoup(resultsPage.text, "html5lib") 
comment = soup.find(text=lambda x: isinstance(x, NavigableString) and "Regular Season Table" in x) 
df = pd.read_html(comment) 

だった、しかし、私は見つけられませんよこのページで適切にテーブルを作成してください。私は何が欠けているか分からない。

答えて

1

あなたがIDを使用して取得することができます一つのテーブルがあります:

import requests 
from bs4 import BeautifulSoup 


url = 'http://www.hockey-reference.com/players/o/ovechal01/gamelog/2016' 
resultsPage = requests.get(url) 
soup = BeautifulSoup(resultsPage.text, "html5lib") 
table = soup.select_one("#gamelog") 
print(table) 

またはちょうどパンダを使用して:

df = pd.read_html(url, attrs = {'id': 'gamelog'}) 

あなたはどのNavigableStringを探しているとあなたのコードが動作することができませんでしたキャプションタグ内にある<caption>Regular Season Table</caption>テーブルではない場合は* .find_previous` *を呼び出してテーブルを取得する必要があります:

comment = soup.find(text=lambda x: isinstance(x, NavigableString) and "Regular Season Table" in x) 
table = comment.find_previous("table") 

また、table = comment.parent.parentを使用することもできますが、find_previousを使用する方が良い方法です。

関連する問題