파이썬 html 크롤링

조회수 1285회

https://fifa.com/worldcup/players/browser/

여기서 선수마다 있는 ID 코드를 전부 crawling오고 싶은데 html상에 선수별 id code를 찾을 수가 없습니다. 혹시 html에서 어디 있는지 알 수 있을까요? 만약 없으면 선수별 아이디를 얻을 수 있는 방법이 있을 까요?

ex) Aaron Mooy -> 312252

2 답변

  • 좋아요

    1

    싫어요
    채택 취소하기

    아래와 같이 하면 됩니다.

    In [6]: soup.find('a', {'data-player-id' : '312252'})
    Out[6]: 
    <a class="fi-p--link " data-player-id="312252" href="/worldcup/players/player/312252/">
        <div class="fi-p">
    
    
          <div class="fi-p__picture">
            <svg class="fi-clip-svg" id="" viewBox="0 0 200 200">
                  <image class="image-r image-responsive" height="100%" width="100%" xlink:href="https://api.fifa.com/api/v1/picture/players/2018fwc/312252_sq-300_jpg?allowDefaultPicture=true"></image>
    
            </svg>
    
              <div class="fi-p__flag" data-countrycode="aus">
                <div class="fi-p__flag__wrapper">
    
    
      <img alt="AUS" class="fi-AUS fi-flag--4" src="http://api.fifa.com/api/v1/picture/flags-fwc2018-4/aus" title="AUS"/>
                </div>
              </div>
                <div class="fi-p__jerseyNum ">
          <span class="fi-p__num">13</span>
        </div>
          </div>
    
    
          <div class="fi-p__wrapper-text">
            <div class="fi-p__name">
              Aaron MOOY
            </div>
              <div class="fi-p__country">
                Australia
              </div>
                        <div class="fi-p__role">
    Midfielder            </div>
    
    
    
          </div>
        </div>
      </a>
    
    In [7]: soup.find('a', {'data-player-id' : '312252'}).attrs['data-player-id']
    Out[7]: '312252'
    
  • 선수들의 정보는 질문상의 주소가 아닙니다.

    선수 목록은 아래 주소입니다.

    https://www.fifa.com/worldcup/players/_libraries/byposition/all/_players-list
    

    player id 추출 코드입니다.

    import requests
    import bs4
    
    contents = requests.get('https://www.fifa.com/worldcup/players/_libraries/byposition/all/_players-list').content
    soup = bs4.BeautifulSoup(contents, 'html5lib')
    
    players_id =  [tag.attrs['data-player-id'] for tag in soup.findAll(lambda tag:tag.has_attr('data-player-id'))]
    
    • 안녕하세요 답변 감사드립니다. 주신 선수 목록 주소는 어떻게 확인할 수 있는건가요..? 제가 드렸던 주소에서의 html에서는 찾을 수가 없어서 다시 질문 드립니다. Kwansu Kim 2018.6.18 17:17
    • 사이트를 분석해야합니다. 요새 웹어플리케이션들은 복잡하기도 하고 동적으로 데이터를 로딩해오기 때문에 여러 도구를 활용하는 편이 빠릅니다. 질문에 있는 페이지도 로딩후에 javascript 부분에서 동적으로 호출합니다. 이런경우는 개발자 도구나 fiddler 같은 도구를 이용해서 찾는 편이 편합니다. 정영훈 2018.6.18 17:53
    • 친절한 설명 감사합니다. 혹시 위에 code에서 for문 돌리기 전 attr 하나만 구하기 위해선 coding을 어떻게 해야할까요..? tag.attrs 메소드는 쓰지 않아봐서 질문 드립니다. 혹시 select나 find로도 찾는 방법이 있을까요?! Kwansu Kim 2018.6.19 18:50

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)