2017-01-20 29 views
0

私の次のコードは、各プレーヤーのデータを行単位でスクラップし、列の値をコンマで区切って管理しています。しかし、プレイヤー名には、別の行にも表示されている基本的な子供がいるようです。私は単純に、リンクではなく名前のテキストを求めます。また、いくつかのレコードが私の出力で繰り返されます。どんな助けでも大歓迎です!私はBS4とPython 3.5を使用しています。ここに私のコードは次のとおりです。うちBeautifulSup掻き出しの問題

import urllib 
import urllib.request 
from bs4 import BeautifulSoup 

def make_soup(url): 
    page = urllib.request.urlopen(url) 
    soupdata = BeautifulSoup(page, "html.parser") 
    return soupdata 

currentdata = "" 
soup = make_soup("http://www.foxsports.com/soccer/stats? competition=1&season=20160&category=STANDARD&pos=0&team=0&isOpp=0&sort=3&sortOrder=0&page=0") 
for record in soup.findAll('tr'): 
    playerdata = "" 
    for data in record.findAll('td'): 
     playerdata = playerdata + "," + data.text 
     currentdata = currentdata + "\n" + playerdata 

     print(currentdata) 
+0

あなたは[リクエスト](http://docs.python-requests.org/en/master/をチェックアウト、ウェブスクレイピングになっている場合。urllibはよりリクエストを使用することがはるかに簡単である。このことができます –

答えて

1
import urllib 
import urllib.request 
from bs4 import BeautifulSoup 

def make_soup(url): 
    page = urllib.request.urlopen(url) 
    soupdata = BeautifulSoup(page, "html.parser") 
    return soupdata 

currentdata = "" 
soup = make_soup("http://www.foxsports.com/soccer/stats? competition=1&season=20160&category=STANDARD&pos=0&team=0&isOpp=0&sort=3&sortOrder=0&page=0") 
for record in soup.findAll('tr', class_=False): 

    row = [data.get_text(',', strip=True) for data in record.findAll('td')] 
    print(' '.join(row)) 

1,Sánchez, Alexis,Sánchez, A.,ARS 21 20 1786 14 7 30 72 3 0 
1,Costa, Diego,Costa, D.,CHE 19 19 1681 14 5 26 57 5 0 
1,Ibrahimovic, Zlatan,Ibrahimovic, Z.,MUN 20 20 1800 14 3 36 89 5 0 
4,Kane, Harry,Kane, H.,TOT 16 16 1360 13 2 27 53 0 0 
5,Lukaku, Romelu,Lukaku, R.,EVE 20 19 1737 12 4 28 55 3 0 
5,Defoe, Jermain,Defoe, J.,SUN 21 21 1882 12 2 18 57 1 0 
  1. は、連結する文字列を使用しない、それらを一緒に参加するよりも、リスト内のデータを取得します。
  2. あなたが望ましくないtrを選択解除するには、class_=Falseを使用してください。これはclass属性を持たないtrを選択します。
  3. get_text()はセパレータを定義できます。
+0

感謝をもう1つ質問がありますが、名前やクラブの頭文字をどのように分けるといいでしょうか?1、Sanchez、Alexis、Sanchez、A.、ARS?特定のスパン要素で作業しようとしていますが、 – hoops9682

+0

ありがとう、大変感謝しています! – hoops9682

関連する問題