-
복습일지 03.5 .5 가 붙은 이유는 스파르톤 진행 중 복습한 내용이기 때문에 양이 너무 많아서 ㅋㅋ
이번 복습은 크롤링에 대한 내용이었다.
확실히 배운지 오래되면 다 까먹는다. 열공 필수!
빈 화면에 멍해지지말고 copy selector을 기억하자 xpath도 사용해본적이 있지만 그건 확실하게 아는게 아니니까 일단 잊기로 했다.
import requests from bs4 import BeautifulSoup # 타겟 URL을 읽어서 HTML를 받아오고, 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.nhn?sel=pnt&date=20200303',headers=headers) # HTML을 BeautifulSoup이라는 라이브러리를 활용해 검색하기 용이한 상태로 만듦 # soup이라는 변수에 "파싱 용이해진 html"이 담긴 상태가 됨 # 이제 코딩을 통해 필요한 부분을 추출하면 된다. soup = BeautifulSoup(data.text, 'html.parser') ############################# movie = soup.select('#old_content > table > tbody > tr') #개발자도구 > copy selector를 이용한다. #헷갈릴땐 같은 맥락 두개를 가져와서 비교해서 쓴다 #old_content > table > tbody > tr:nth-child(2) > td.title > div > a 1위 영화이름 #old_content > table > tbody > tr:nth-child(3) > td.title > div > a 2위 영화이름 #old_content > table > tbody > tr:nth-child(2) > td:nth-child(1) > img 1위 숫자 #old_content > table > tbody > tr:nth-child(3) > td:nth-child(1) > img 2위 숫자 alt에 순위가 들어있음 #(<img src="https://ssl.pstatic.net/imgmovie/2007/img/common/bullet_r_r01.gif" alt="01" width="14" height="13">) #old_content > table > tbody > tr:nth-child(2) > td.point 1위 평점 #old_content > table > tbody > tr:nth-child(3) > td.point 2위 평점
모르겠다면 일단 필요한 부분을 copy selector 해와서 비교해보고 시작하면된다.
for movie_name in movie: # a태그 까지 찾아 들어가는 경로를 준다. a_tag = movie_name.select_one('td.title > div > a') #text를 붙이면 에러가 발생하기 때문에 none이 필요 #비어있는 항목이 존재하기 때문이다. if a_tag is not None: a_name = a_tag.text #alt는 img 태그속 속성이기 때문에!(이미지 파일이 깨졌을 때 표시할 텍스트를 말한다) a_rank = movie_name.select_one('td:nth-child(1) > img')['alt'] a_score = movie_name.select_one('td.point').text print(a_rank, a_name, a_score)
1위부터 2위~ 쭉 가져오기 위해선 for문을 돌려야한다.
그렇다면 동일한 부분을 하나의 변수에 때려넣고, 나머지 부분을 for문으로 돌려버린다. 아마도 그런것 같다?
아래의 if문은 text로 출력할때 에러가 뜨거나, 빈공간이 있을때 사용하면 좋다. None값인 태그는 제외해주는 것
다른 예로 지니뮤직을 크롤링 할 땐 None값이 없었기 때문에 if 문을 만들 필요가 없었다.
지니뮤직은 복습으로 하니까 간단했다규~
music_list = soup.select('#body-content > div.newest-list > div > table > tbody > tr') #노래제목 #body-content > div.newest-list > div > table > tbody > tr:nth-child(1) > td.info > a.title.ellipsis 1위 #body-content > div.newest-list > div > table > tbody > tr:nth-child(2) > td.info > a.title.ellipsis 2위 #순위 #body-content > div.newest-list > div > table > tbody > tr:nth-child(1) > td.number #가수 #body-content > div.newest-list > div > table > tbody > tr:nth-child(1) > td.info > a.artist.ellipsis for music in music_list: title = music.select_one('td.info > a.title.ellipsis').text.strip() rank = music.select_one('td.number').text[0:2].strip() artist = music.select_one('td.info > a.artist.ellipsis').text print(rank,'위',title,'-',artist)
출력도 완벽했다 ^^
이제 실전 나홀로메모장에 적용시키는 일만 남았다. 그거 하고나면 6시 될것같으니 복습일지 04로 찾아오겠음!
'개발일지' 카테고리의 다른 글
복습일지 대신 프로젝트일지 01 (0) 2021.09.08 복습일지 04 (0) 2021.09.05 스파르톤 생존일지 (21:00~06:00) (0) 2021.09.04 내일배움단 프로젝트 챌린지 개발일지(1~15일차) (0) 2021.09.03 마지막 개발일지 5편 (0) 2021.08.31