http://www.scoresandodds.com/grid_20111225.htmlのテーブルからマイアミ ヒートとその対戦相手のデータを取得しようとしています。私が抱えている問題は、NBA と NFL およびその他のスポーツのテーブルがすべて同じようにマークされており、取得するすべてのデータが NFL テーブルからのものであることです。もう1つの問題は、シーズン全体のデータをスクレイピングしたいのですが、異なるテーブルの数が変化し、テーブル内のマイアミの位置が変化することです。これは、今までさまざまなテーブルに使用してきたコードです。
では、なぜこれが仕事を成し遂げていないのですか?辛抱していただきありがとうございます。私は本当の初心者で、数日間この問題を解決しようとしてきましたが、効果がありません.
def tableSnO(htmlSnO):
gameSections = soup.findAll('div', 'gameSection')
for gameSection in gameSections:
header = gameSection.find('div', 'header')
if header.get('id') == 'nba':
rows = gameSections.findAll('tr')
def parse_string(el):
text = ''.join(el.findAll(text=True))
return text.strip()
for row in rows:
data = map(parse_string, row.findAll('td'))
return data
最近、別のアプローチを試すことにしました。ページ全体をスクレイピングして問題のデータのインデックスを取得すると (ここで停止します:)、テーブルの構造は決して変わらないため、リストから次のデータ セットを取得できます。htmlSnO を取得するのと同じ方法で、対戦相手のチーム名を取得することもできます。これはとても基本的なことのように感じますが、正しく理解できないのは私を殺しています.
def tableSnO(htmlSnO):
oddslist = soupSnO.find('table', {"width" : "100%", "cellspacing" : "0", "cellpadding" : "0"})
rows = oddslist.findAll('tr',)
def parse_string(el):
text = ''.join(el.findAll(text=True))
return text.strip()
for row in rows:
data = map(parse_string, row.findAll('td'))
for teamName in data:
if re.match("(.*)MIAMI HEAT(.*)", teamName):
return teamName
return data.index(teamName)