본문 바로가기
data

[데이터 수집] 트랜스퍼마크트(Transfermarkt) 선수 정보, 가치 크롤링

by gosin 2024. 4. 23.

https://www.transfermarkt.com/

 

Football transfers, rumours, market values and news

 

www.transfermarkt.com


 

transfermarkt의 robots.txt

Slurp는 Yahoo의 크롤러이고, Mediapartners-Google는 구글, wget은 리눅스에서 웹의 파일 다운로드를 도와주는 명령어이다. wget 크롤러에게는 크롤링을 허용하지 않는 것 같다. / (틀렸으면 말해주시면 감사하겠습니다.)

User-agent: *, Allow: / → 모든 사용자에 대해 모든 경로에 대한 엑세스를 허용한다고 한다.
트랜스퍼마크트 운영자가 크롤러를 환영하고 있다.
(어느 정보를 크롤링 하느냐에 따라 이용 약관 검토하고 동의를 얻는 것이 좋다고 함)

 


 

transfermarkt > Market values > Most valuable players에 들어가면 아래와 같이 선수들의 시장가치를 볼 수 있다.

사카, 라이스 사랑한다.

크롤링을 하기 위해 사용 할 라이브러리는 RequestsBeautifulSoup이다.

Requests는 html을 빠르게 읽어올 수 있게 해주고,

BeautifulSoup은 Requests를 사용해 가져온 html 텍스트 데이터에서 html 태그를 추출할 수 있게 도와주는 아주 감사한 분이다.


🖥️ 코드

import requests
from bs4 import BeautifulSoup
import pandas as pd
import time

import time을 하는 이유는, time.sleep()을 사용해 서버에 대한 예의를 지키기 위함이다.ㅎ

 

headers = {'User-Agent': '-'}

url = "https://www.transfermarkt.com/spieler-statistik/wertvollstespieler/marktwertetop?ajax=yw1&page=1"

r = requests.get(url, headers=headers)
r.status_code

User-agent의 값에는 구글에 'my user agent'를 검색하여 나온 내용을 복붙하면 된다.
requests의 get을 사용해 요청을 보내고,
r.status_code가 요청 결과를 알려주는데, 200이면 성공, 404, 500 등은 오류이다.

 

soup = BeautifulSoup(r.text, 'html.parser')

BeautifulSoup을 사용해 html 텍스트를 저장한다.
html 태그를 불러오기 위한 기초 사용법은 Beautiful Soup Documentation에서 확인할 수 있다.

 

개발자도구(F12)를 열어서, 불러올 정보의 html 부분을 확인하였다.
선수의 이름, 포지션, 나이, 국가, 클럽, 마켓벨류를 한꺼번에 나타내는 정보는
tr 태그의 class가 'odd' 또는 'even'인 것을 확인하고

 

player_info = soup.find_all('tr', class_=['odd', 'even'])

위와 같이 코드를 작성하여 선수들의 정보를 불러왔다.

 

number = []
name = []
position = []
age = []
nation = []
club = []
value = []

for info in player_info:
  player = info.find_all('td')
  number.append(player[0].text)
  name.append(player[3].text)
  position.append(player[4])
  age.append(player[5].text)
  nation.append(player[6].img['alt'])
  club.append(player[7].img['alt'])
  value.append(player[8].text.strip())

선수들의 정보를 담을 빈 리스트를 생성해주고, html 태그를 확인해보며 원하는 정보에 맞게 불러왔다.

 

df = pd.DataFrame(
    {'number': number,
     'name': name,
     'position': position,
     'age': age,
     'nation': nation,
     'club': club,
     'value': value}
)

df

그리고 이를 Dataframe으로 저장하고 불러와주면 끝이다.

 

위는 1페이지만 불러온 것이고, 실제로는 페이지가 20개나 있기에 20페이지의 정보를 모두 불러오기 위해서는,

for i in range(1, 21):
    url = f"https://www.transfermarkt.com/spieler-statistik/wertvollstespieler/marktwertetop?ajax=yw1&page={i}"

for문과 f-string을 활용하여 20페이지까지 불러오게 하면 된다.

 

https://github.com/leejongseok1/data_analysis/blob/main/transfermarkt_crawling.ipynb

 

data_analysis/transfermarkt_crawling.ipynb at main · leejongseok1/data_analysis

DA. Contribute to leejongseok1/data_analysis development by creating an account on GitHub.

github.com

 

.

.

.

.

.

참고 : https://github.com/jaygil8755/Python_Project_Transfermarket

 

GitHub - jaygil8755/Python_Project_Transfermarket: Transfermarkt.com crawling and Pandas 데이터분석 실습

Transfermarkt.com crawling and Pandas 데이터분석 실습 . Contribute to jaygil8755/Python_Project_Transfermarket development by creating an account on GitHub.

github.com