
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에 들어가면 아래와 같이 선수들의 시장가치를 볼 수 있다.

크롤링을 하기 위해 사용 할 라이브러리는 Requests와 BeautifulSoup이다.
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
'data' 카테고리의 다른 글
| House Prices (집값 예측) 데이터셋 컬럼 설명 (3) | 2024.06.06 |
|---|---|
| [데이터 수집] Fotmob (축구 경기 정보, 통계 사이트) 크롤링 - Arsenal (0) | 2024.05.19 |