이번주 느낀점

지난번에 배운걸 스스로 이리저리 굴려보면서 작성해보았다.
시작하기전 또 궁금증이 생겼다. soup은 무엇일까.. 왜 저기다 Beautiful까지 붙여서 BeautifulSoup이 되었을까.. 하는.. 그냥 위키를 검색해보니 저렇게 나온다.

뷰티풀 수프(Beautiful Soup)는 HTML과 XML 문서들의 구문을 분석하기 위한 파이썬 패키지이다. HTML로부터 데이터를 추출하기 위해 사용할 수 있는 파싱된 페이지의 파스 트리를 만드는데, 이는 웹 스크래핑에 유용하다. 뷰티풀 수프는 이 프로젝트를 계속 기여하고 있는 Leonard Richardson이 시작하였다. 추가적인 지원은 오픈 소스 유지보수를 위한 유료 구독형인 Tidelift의 지원을 받는다.

바로 다음 주 수업에 HTML이 들어가는거 같던데, 이렇게 얼렁뚱땅 넘어가도 되는게 맞는가? 라는 생각이 자꾸 든다. 그래도 어찌저찌 스스로 고민도 해보고 출력시키려고 print를 눌러보며 계속되는 에러에 자주 사용하지 않던 뇌 한쪽이 돌아가는 느낌도 든다. 수업의 핵심은 어떻게 굴러가는지 알려주고 이걸 일련의 복습 및 실습을 통해 계속 각인시키려는거 같다.

이번주 배운 내용

import requests
from bs4 import BeautifulSoup

headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}
data = requests.get('https://movie.naver.com/movie/sdb/rank/rmovie.naver?sel=pnt&date=20210101',headers=headers)

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

lis = soup.select('#old_content > table > tbody > tr')

for li in lis:
  a = li.select_one('a')
  if a is not None:
    title = a.text
    rank = li.select_one('img')['alt']
    star = li.select_one('td.point').text
    print(rank,title,star)

개발자 도구는 이전에 FB Pixel 체크나 즐겨하는 게임인 로아에서 액세서리 검색을 위해 사용했던 icepeng 개발자가 만든걸 console로 실행하는거 정도였는데.. 내가 이걸 파트별로 찾아봐서 파악하는 용도로 쓰게 될 줄이야. 사실 마우스 커서를 통해 어느 파트에 속해있는지, 어느 데이터(이미지)를 가져와야 하는지 등에 대해서는 회사일을 하는 과정에서 자연스럽게 깨우치고 있던 내용이었다.

웹 크롤링시에 제일 중요한 것은 당연히 구조를 파악하는 일인거같다. 너무나 당연한거다.. 그래도 td 나 tr 로 나뉘는 파트 자체는 빠르게 파악해서 바로 구분하는데는 성공했다.

for를 통한 반복문을 구성하는데 있어, 중간중간 들어가는 구분선이 None으로 찍혀나오는걸 방지하기위한 if 조건문까지는 무난하게 이해했다. 하지만 나중에 이걸 직접 혼자 하는 과정에서 자연스럽게 기억해서 입력하거나 하다못해 잘 찾아서 하기만 해도 좋겠다는 생각이 들었다.

영화 순위는 img 형태로 되어있었는데, 거기서 alt 부분이 곧 순위를 나타내는 텍스트임을 깨달았으나 alt 부분만 어떻게 출력 시켜야하는지에서는 막혔었다. li.select_one(td.ac.alt).text / li.select_one('ac.alt').text 와 같은 형식으로 똥꼬쇼를 펼쳤으나 현실은 img가 나오는 파트에서 alt 부분만 따로 출력하는 방식이었던 것이다. 그 밑에있는 평점은 내가 생각한대로 텍스트부분만 깔끔하게 가져올 수 있었는데, 저부분은 무난했다. 저 이미지에서 순위 가져오는건 이것도 회사 개발자분이 출근하면 물어볼 예정이다...

마지막으로 print 위치 또한 신기했는데, 처음에 들여쓰기를 잘못해서 print가 한칸 앞으로 나와서 출력시켰더니, 50위에 위치만 정보값이 제일 위에 나오고 마지막에 두 번 더 반복해서 나오더라. 들여쓰는걸로 바로 해결했으나, 왜 한번 잘못했을때는 그게 먼저 나왔는지도 다시 찾아볼 예정이다.

0개의 댓글