2017-01-20 1 views
0

다음 코드 (거의)는 각 플레이어 데이터를 쉼표로 구분 된 행으로 스크래핑합니다. 그러나 플레이어 이름에는 하위 행이 별도의 행에 표시되는 것으로 보입니다. 나는 단순히 링크가 아니라 이름의 텍스트를 원한다. 또한 일부 출력은 내 출력에서 ​​반복됩니다. 어떤 도움이라도 대단히 감사하겠습니다! BS4와 Python 3.5를 사용하고 있습니다.BeautifulSoup 긁어 모으기 문제

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, Sanchez, Alexis, Sanchez, A., ARS)? 특정 범위 요소로 작업하려고하지만이 방법이 더 쉽다고 생각합니다. – hoops9682

+0

감사합니다. 많이 감사드립니다! – hoops9682

관련 문제