이번 시간에는 축구선수 시장가치 분석을 한 번 해보겠습니다.
Transfermarket.com 사이트에서 웹 크롤링을 통해 데이터를 가져오고 파이썬의 Pandas를 이용하여 분석을 해보겠습니다.
먼저 웹 크롤링이 먼지 알아보겠습니다.
웹 크롤링 이란 ?
웹 사이트에 있는 데이터를 추출해서 올 떄 자동화 된 프로세를 하는 것
웹 페이지의 기본 구조
- HTML (Structure) - 뼈대 , 구조
- CSS (Styling) - 디자인
- Java script (Functionality) - 기능적
Chrome 개발자 도구
- Chrome에서 오른쪽 마우스 -> 검사(N)
- F12
- 더보기 -> 도구 더보기 -> 개발자 도구
Chrome 개발자 도구에서 위 아이콘을 클릭하여 웹 페이지에 마우스 커서를 옮기면 마우스 커서가 위치한 부분의 코드가 어떻게 이루어져있는지 보여준다.
웹 크롤링에 필요한 기본 지식을 알았으니 파이썬을 이용하여 웹 크롤링을 한 번 해보자
1. 파이썬을 이용한 웹 크롤링
1-1. 크롤링에 필요한 파이썬 라이브러리
- Requests - 웹 페이지(html) 읽어 오기, 정적 웹 페이지 사용
- Selenium - 웹 페이지 자동화, 동적 웹 페이지(스크롤, 로그인, ...) 사용
- BeautifulSoup - 원하는 데이터 가져오기 (스크래핑)
1-2. Requests 라이브러리 사용법
https://requests.readthedocs.io/en/master/
Requests: HTTP for Humans™ — Requests 2.31.0 documentation
Requests: HTTP for Humans™ Release v2.31.0. (Installation) Requests is an elegant and simple HTTP library for Python, built for human beings. Behold, the power of Requests: >>> r = requests.get('https://api.github.com/user', auth=('user', 'pass')) >>> r.
requests.readthedocs.io
에서 reqeusts 사용 코드를 한 번 보자
위처럼 요청을 보냈을 때, 200응답이 오지 않는다면
User agent 정보를 header에 넣어 요청해주자
User agent 정보는 google에 'my user agent' 를 검색해주면 알 수 있다.
1. headers 와 url 의 정보 넣어주기
headers = {'user-Agent' : '유저정보'}
url = '접속할 사이트'
2. requests.get으로 요청 한 후 status_code로 응답 확인 하
requests.get(url, headers = headers)
.status_code
1-2. Beautifulsoup 라이브러리 사용법
pip install beautifulsoup4 - beautifulsoup 설치
Beautiful Soup Documentation — Beautiful Soup 4.12.0 documentation (crummy.com)
Beautiful Soup Documentation — Beautiful Soup 4.12.0 documentation
Beautiful Soup Documentation Beautiful Soup is a Python library for pulling data out of HTML and XML files. It works with your favorite parser to provide idiomatic ways of navigating, searching, and modifying the parse tree. It commonly saves programmers h
www.crummy.com
위 사이트에서 사용법을 한 번 살펴보자
먼저 html_doc 안에 문서 정보를 저장해준 후
BeautifulSoup(html_doc, ' html.parser') 변수에 넣어준다.
1-2-1. 처음 tag의 정보 가져오는 방법
BeautifulSoup(html_doc, ' html.parser') 을 넣어준 변수뒤에 가져올 태그명을 붙혀준다
ex) soup.p
또는 find 함수를 이용한다
ex) soup.find('p')
1-2-2. 처음 tag의 속성 정보만 가져오는 방법
대괄호 뒤에 속성 정보를 넣어주면 된다.
ex) soup.p['href']
ex) soup.find('a')['href']
find_all 을 이용하면 모든 tag의 정보를 가져올 수 있다
1-2-3. 모든 'a' 태그의 'href' 속성 값 전부 가져오기
1-2-2 방식처럼 하게 되면 오류가 나게 된다
위 같은 경우는 반복문을 사용하여 가져오자
1-2-4. 텍스트만 가져오기
.text를 이용하여 텍스트만 가져올 수 있다.
1-2-5. 동일한 태그를 순서 지정해서 가져오기
위의 1-2-2에서 모든 'a'태그를 가저온 사진을 보면 'a'들이 리스트 형태로 불러져 온 것을 볼 수 있다.
따라서 find_all로 태그를 모두 가져온 뒤 리스트에 순서를 지정해주면 원하는 태그 번호를 가져올 수 있다.
1-2-6. 태그와 조건을 가진 값 찾아오기
참고 : [Python 실전 Project] 축구선수 시장가치 분석 Part1. 웹크롤링이란? (youtube.com)
[Python 실전 Project] 축구선수 시장가치 분석 Part1. BeautifulSoup 라이브러리 실습 (youtube.com)
https://www.youtube.com/watch?v=0fZSH3K4sYI&list=PL13IrJom4GzssqejzOqR2S0OukBIyufjy&t=466