2016-06-23 18 views
1

私はこの[webpage] [1]から特定のデータを取得しようとしていますが、最終的には今のところ自分のテーブルに入れたいと思っています。私が見せたいデータ。下のコードでは、私はクラスチームのすべてのチームを見せてもらうことができますが、私は「チーム・オッズ」と「チーム・イズ」の両方を持っていて、PythonでBeautifulSoupを使ってHTMLを解析する

私は現在のところ名前を取り出すことに専念しています。どんな助けも大いにありがたく思っています。私はこれを一日中考え出し、かなりひどいです!私はちょうどPythonを学び始めて、あなたに私に答えを与えてほしくない、ちょうど正しい方向に私を向ける。

ありがとうございます!

import bs4, requests 
from bs4 import BeautifulSoup 
# Scraping all data from website 

url = 'http://www.scoresandodds.com/index.html' 
response = requests.get(url) 
html = response.content 
# Taking content from above and searching through it find certain elements with certain attributes 

soup = BeautifulSoup(html, "html.parser") 
table = soup.find('tbody') 

for row in table.findAll('tr', attrs={'class' : 'team even'}): 
    list_of_cells = [] 
    for cell in row.findAll('td'): 
     text=cell.text.replace(' ', '') 
     list_of_cells.append(text) 
    print(list_of_cells) 

答えて

0

名前だけを取得するには簡単です、class_="game"はそうあなたが単なるテキスト名でTDを引っ張るも、両方の奇数とを取得し使用します。

from bs4 import BeautifulSoup 
import requests 

soup = BeautifulSoup(requests.get("http://www.scoresandodds.com/index.html").content) 

table = soup.select_one("#mlb").find_next("table") 

head = ",".join([th.text for th in table.select("tr th")]) 
print(head) 
for tr in table.find_all("tr",class_="team"): 
    print(tr.find("td","name").text.strip()) 

あなたを与えるだろうどの:

951 SAN FRANCISCO GIANTS 
952 PITTSBURGH PIRATES 
953 SAN DIEGO PADRES 
954 CINCINNATI REDS 
955 CHICAGO CUBS 
956 MIAMI MARLINS 
957 NEW YORK METS 
958 ATLANTA BRAVES 
959 ARIZONA DIAMONDBACKS 
960 COLORADO ROCKIES 
961 SEATTLE MARINERS 
962 DETROIT TIGERS 
963 CHICAGO WHITE SOX 
964 BOSTON RED SOX 
965 OAKLAND ATHLETICS 
966 LOS ANGELES ANGELS 
967 PHILADELPHIA PHILLIES 
968 MINNESOTA TWINS 

複数のデータを取得するには、クラスのリストを渡すことができます。

from bs4 import BeautifulSoup 
import requests 

soup = BeautifulSoup(requests.get("http://www.scoresandodds.com/index.html").content) 

table = soup.select_one("#mlb").find_next("table") 

head = ",".join([th.text for th in table.select("tr th")]) 
print(head) 
for tr in table.find_all("tr",class_="team"): 
    print(", ".join([td.text.strip() for td in tr.find_all("td",["name","pitcher","currentline","score"]) ])) 

私たちは、ソースを見れば、あなたはいくつかのクラス名がラインのように繰り返される参照:部分を使用して

enter image description here

だから我々はまた、など現在とrunlineを取得するためにidを使用することができます。..データIDテキスト:

for tr in table.find_all("tr", class_="team"): 
    print(tr.select_one("td[id*=Pitcher]").text) 
    print(tr.select_one("td[id*=Current]").text) 
    print(tr.select_one("td[id*=Line]").text) 
    print("") 

Whicはあなたを与えるだろう:

(r) surez, a 
8.5o15 
+1.5(-207) 

(l) niese, j 
-108 
-1.5(+190) 

(l) friedrich, c 
9.5o15 
+1.5(-195) 

(l) lamb, j 
-115 
-1.5(+179) 

(l) lester, j 
-156 
-1.5(-105) 

(l) chen, w 
7.5o15 
+1.5(-103) 

(r) harvey, m 
-155 
-1.5(+106) 

(r) wisler, m 
7.5u15 
+1.5(-115) 

(r) greinke, z 
-150 
-1.5(+109) 

(r) butler, e 
10.5 
+1.5(-118) 

(r) sampson, a 
10u15 
+1.5(-170) 

(l) norris, d 
-123 
-1.5(+156) 

(r) shields, j 
10o20 
+1.5(+117) 

(r) porcello, r 
-235 
-1.5(-127) 

(r) graveman, k 
8o15 
+1.5(-170) 

(r) lincecum, t 
-133 
-1.5(+156) 

(r) eickhoff, j 
8.5 
+1.5(-154) 

(r) nolasco, r 
-151 
-1.5(+142) 

すべてのテーブルデータを取得するには、すべてをまとめて作成する必要があります。

+0

ありがとう、私が混乱しているのは、テーブル= soup.select_one( "#mlb")。find_next( "table")find_next( 'table')を除いて、行を降ろす?私はテーブルのタグをどこからでも明確にすることが大切なページの最上部以外は何も言わなかった。助けてくれてありがとう! – Beez

+0

@Beezの場合、 'select_one(" table ")'や 'find(" table ")'のようにテーブルを選択するだけで、そのIDを持つdivの後のテーブルにデータがあります。 'Team、Pitcher、Open、Line Movements、Current、Runline、Scores'だけでなくもっと多くのヘッダ/カラム –

関連する問題