HTML 태그 탐색하기
by CoriHTML 태그를 살펴보는 방법 (부모 태그, 자식 태그 등)에 대해 다룬다.
* 해당 포스팅에서 다루고 있는 모든 내용은 다음 서적을 참고하였습니다.
1. 크롤링 대상 탐색하기
1) 태그를 출력해 보았을 때, 원하는 개수만큼 들어있는 경우
F12키를 누르면 위 그림과 같이 브라우저에서 HTML 소스를 확인할 수 있다. 태그를 한 단계씩 살피다보면
노래 한 곡의 정보를 가지는 태그를 찾을 수 있는데, 태그를 살펴보며 원하는 정보를 찾을 수 있어야 한다.
songs = soup.select('tbody > tr') # 50개 노래 저장
song = songs[0]
title = song.select('a.title')
print(len(title)) # 1
# 1이 나왔다면, 만족하지 말고 곡 제목 태그를 제대로 가지고 왔는지 확인해보자 -> text 이용
title = song.select('a.title')[0].text
print(title)
# title에 공백 문자와 줄 바꿈 기호가 같이 포함되어 있으므로, 이를 제거 -> strip() 이용
title = song.select('a.title')[0].text.strip()
print(title)
2) 태그를 출력해 보았을 때, 원하는 개수가 들어있지 않은 경우
Bugs에는 tr 태그 안에 노래 제목, 가수 정보가 포함되어 있다. tr 태그를 살펴보자.
# 모든 tr 태그의 정보 탐색
songs = soup.select('tr')
print(len(songs)) # 104
# 길이를 출력해 보았더니, 104개가 나옴 -> 상위 tbody 태그 추가하여 선택
songs = soup.select('tbody > tr')
print(len(songs)) # 103
# 길이를 출력해 보았더니, 103개가 나옴 -> 상위 table 태그 추가하여 선택
songs = soup.select('table > tbody > tr')
print(len(songs)) # 103
# table 태그에 있는 byChart라는 클래스 이름 지정하여 선택
songs = soup.select('table.byChart > tbody > tr')
print(len(sogns)) # 100
테이블의 클래스 이름을 지정하여 선택하였더니, 우리가 원하는 100개의 음원 정보를 선택할 수 있었다.
# 제대로 선택한지 확인
print(songs[0])
노래 정보를 포함하는 태그를 제대로 찾았기 때문에, 이 태그를 이용해 노래 제목과 가수명을 추출해보자.
노래 정보는 태그명이 p 이면서, class 이름이 title인 태그 안의 a 태그에 들어있다
# a 태그를 song 태그 안에서 찾아보자
title = song.select('a')
print(len(title)) # 11
# 상위 태그로 p 태그를 지정해 검색 조건을 추가하자
title = song.select('p > a')
print(len(title)) # 2
# p 태그 아래에 존재하는 a 태그를 모두 찾았지만 2개가 나오기 때문에, 클래스 이름을 지정하자
title = song.select('p.title > a')
print(len(title)) # 1
태그의 클래스 이름까지 지정하여 검색하였더니, 우리가 원하는 1개의 title 정보를 찾을 수 있었다.
# 제대로 선택한지 확인
title = song.select('p.title > a')[0].text
print(title)
가수 이름도 위와 같은 과정을 통해 제대로 선택할 수 있다.
1~100위 정보 또한 추출해보자
# 반복문을 활용한 1위에서 100위까지 정보 추출
songs = soup.select('table.byChart > tbody > tr')
for song in songs:
title = song.select('p.title > a')[0].text
singer = song.select('p.artist > a')[0].text
print(title, singer, sep = '|')
'AI > Data Analysis' 카테고리의 다른 글
[Elastic Search] 데이터 검색 (0) | 2021.10.25 |
---|---|
[크롤링] 외국인 관광객 데이터 다루기 (2) (0) | 2021.09.07 |
[크롤링] 3. 외국인 관광객 데이터 다루기 (1) (0) | 2021.08.30 |
[크롤링] 2. 유튜브 랭킹 데이터 다루기 (0) | 2021.08.27 |
[크롤링] 1. 음원 정보 수집하기 (0) | 2021.08.25 |
블로그의 정보
코딩하는 오리
Cori